这是 AWS Linux AMI + EBS 上的标准 Apache Web 服务器。我们注意到平均负载较高 (+8),并iotop -a
显示:
Total DISK READ: 0.00 B/s | Total DISK WRITE: 2.37 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
3730 be/4 root 0.00 B 0.00 B 0.00 % 91.98 % [kworker/u8:1]
774 be/3 root 0.00 B 1636.00 K 0.00 % 15.77 % [jbd2/xvda1-8]
3215 be/4 apache 0.00 B 40.39 M 0.00 % 0.88 % httpd
3270 be/4 apache 0.00 B 38.20 M 0.00 % 0.93 % httpd
2770 be/4 apache 0.00 B 46.86 M 0.00 % 0.71 % httpd
当 apache 关闭时,kworker 和 jbd2 也会关闭。
由于我们有足够的可用 RAM,因此服务器不会进行交换。我见过与数据库服务器相关的此问题,但并非仅限于 Apache。
关于如何进一步诊断和预防这种情况,您有什么想法吗?
更新1:性能报告(性能记录-g-a sleep 10)
Samples: 114K of event 'cpu-clock', Event count (approx.): 28728500000
- 83.58% swapper [kernel.kallsyms] [k] xen_hypercall_sched_op ◆
+ xen_hypercall_sched_op ▒
+ default_idle ▒
+ arch_cpu_idle ▒
- cpu_startup_entry ▒
70.16% cpu_bringup_and_idle ▒
- 29.84% rest_init ▒
start_kernel ▒
x86_64_start_reservations ▒
xen_start_kernel ▒
+ 1.73% httpd [kernel.kallsyms] [k] __d_lookup_rcu ▒
+ 1.08% httpd [kernel.kallsyms] [k] xen_hypercall_xen_version ▒
+ 0.38% httpd [vdso] [.] 0x0000000000000d7c ▒
+ 0.36% httpd libphp5.so [.] zend_hash_find ▒
+ 0.33% httpd libphp5.so [.] _zend_hash_add_or_update ▒
+ 0.25% httpd libc-2.17.so [.] __memcpy_ssse3 ▒
+ 0.24% httpd libphp5.so [.] _zval_ptr_dtor ▒
+ 0.24% httpd [kernel.kallsyms] [k] __audit_syscall_entry ▒
+ 0.22% httpd [kernel.kallsyms] [k] pvclock_clocksource_read ▒
答案1
100% IO 并不意味着它使用了所有 IO 操作。它意味着它什么都不做,只是等待 IO。因此,高 %IO 和低/零磁盘带宽可能是正常的。
man iotop
:
[...] 它还显示线程/进程在交换和等待 I/O 时所花费的时间百分比。
如果您一直在等待 IO,则可能是另一个问题kworker
,但我不知道。也许它应该在等待管道或类似的东西。我kworker
有时会在我的服务器上看到同样的情况,但这似乎不是问题。(我第一次看到它时也感到恐慌。)
答案2
遇到驱动器每 5 秒写入一次的问题,我使用了下面的命令,发现 x2goserver 每 5 秒持续运行一次并触发 kworker。请注意,如果驱动器打开,Google Chrome 会写入驱动器。
sudo apt 删除 x2goserver
sudo pidstat -dvl 5
04:52:35 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
04:52:40 PM 0 2318 539.42 0.01 0.00 0 /usr/bin/perl /usr/sbin/x2gocleansessions
04:52:40 PM 0 1920632 0.00 251.20 0.00 0 kworker/u64:3-events_unbound
04:52:40 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
04:52:45 PM 0 2318 809.12 0.01 0.00 0 /usr/bin/perl /usr/sbin/x2gocleansessions
04:52:45 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
04:52:50 PM 0 2318 539.42 0.01 0.00 0 /usr/bin/perl /usr/sbin/x2gocleansessions