我的服务器似乎突然高负载秒内,当我运行dmesg,出现以下日志:
INFO: task auditd:2185 blocked for more than 120 seconds. "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. auditd D 0000012D 2216 2185 1 2216 2184 (NOTLB) f7fcaed0 00000086 eb3e3159 0000012d 0000012c 0000000e 00000000 00000007 c35e3550 eb3e396f 0000012d 00000816 00000002 c35e365c c3420788 f7897200 c36d0468 00000000 00000000 f7fcaecc c041f0c8 00000000 00000000 00000003 Call Trace: [<c041f0c8>] __wake_up+0x2a/0x3d [<c043753f>] prepare_to_wait+0x24/0x46 [<f885f2f1>] log_wait_commit+0x80/0xc7 [jbd] [<c04373f3>] autoremove_wake_function+0x0/0x2d [<f885a680>] journal_stop+0x196/0x1bb [jbd] [<c04968da>] __writeback_single_inode+0x199/0x2a5 [<c045d7b0>] do_writepages+0x2b/0x32 [<c0459283>] __filemap_fdatawrite_range+0x66/0x72 [<c0496f78>] sync_inode+0x19/0x24 [<f8892019>] ext3_sync_file+0xb1/0xdc [ext3] [<c0479211>] do_fsync+0x41/0x83 [<c0479270>] __do_fsync+0x1d/0x2b [<c0404ee1>] sysenter_past_esp+0x56/0x79
我真的很难明白什么是错的,以下是/ proc / meminfo中的内容
# cat /proc/meminfo MemTotal: 4148160 kB MemFree: 119352 kB Buffers: 14024 kB Cached: 3362784 kB SwapCached: 84 kB Active: 2608268 kB Inactive: 1217900 kB HighTotal: 3273304 kB HighFree: 9092 kB LowTotal: 874856 kB LowFree: 110260 kB SwapTotal: 4096552 kB SwapFree: 4096456 kB Dirty: 50816 kB Writeback: 270996 kB AnonPages: 449592 kB Mapped: 889840 kB Slab: 154948 kB PageTables: 32796 kB NFS_Unstable: 0 kB Bounce: 624 kB CommitLimit: 6170632 kB Committed_AS: 2463988 kB VmallocTotal: 116728 kB VmallocUsed: 6728 kB VmallocChunk: 109892 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 Hugepagesize: 2048 kB
以下是负载的样子,有时甚至比这更高:
Tasks: 506 total, 1 running, 504 sleeping, 0 stopped, 1 zombie Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 11.7%us, 1.9%sy, 0.0%ni, 86.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 1.0%us, 1.9%sy, 0.0%ni, 0.0%id, 96.1%wa, 0.0%hi, 1.0%si, 0.0%st Cpu3 : 7.8%us, 1.0%sy, 0.0%ni, 91.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 4148160k total, 4033552k used, 114608k free, 13944k buffers Swap: 4096552k total, 96k used, 4096456k free, 3361112k cached
没有什么似乎与磁盘错误:
# /usr/sbin/smartctl -q errorsonly -H -l selftest -l error /dev/sda # /usr/sbin/smartctl -q errorsonly -H -l selftest -l error /dev/sdb <nooutput>
我不知道如何debugging这个问题,如果一个进程导致这个问题,那么如何find哪个进程可以做到这一点,或者如果一些内核参数需要调整,那么我不知道我应该调整哪个内核参数。
Cpu2 : 1.0%us, 1.9%sy, 0.0%ni, 0.0%id, 96.1%wa, 0.0%hi, 1.0%si, 0.0%st
这是我想到的最突出的性能问题。 注意洼地,巨大的。 该CPU正在处理大量的IO。
堆栈跟踪显示它将日志中的元数据logging下来,然后在等待时卡住。 也许其他一些过程已经抓住了锁而不释放它,导致死锁,另一个过程是旋转和旋转,并有助于增加平均载荷。
你需要做的是收集相当详尽的数据。
iostat -xdk 1 100
还有通常的sar数据。 同时,发布调度程序和硬盘的lun队列深度。