我在使用 Linux 系统时遇到问题,我发现sysstat并sar报告了磁盘 I/O、平均服务时间以及平均等待时间的巨大峰值。
下次发生这些峰值时,我如何确定哪个过程导致了这些峰值?
有可能sar吗?我可以从已经录制的sar文件中找到这些信息吗?
的输出sar -d,系统停顿发生在下午 12.58-13.01 左右。
12:40:01 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
12:40:01 dev8-0 11.57 0.11 710.08 61.36 0.01 0.97 0.37 0.43
12:45:01 dev8-0 13.36 0.00 972.93 72.82 0.01 1.00 0.32 0.43
12:50:01 dev8-0 13.55 0.03 616.56 45.49 0.01 0.70 0.35 0.47
12:55:01 dev8-0 13.99 0.08 917.00 65.55 0.01 0.86 0.37 0.52
13:01:02 dev8-0 6.28 0.00 400.53 63.81 0.89 141.87 141.12 88.59
13:05:01 dev8-0 22.75 0.03 932.13 40.97 0.01 0.65 0.27 0.62
13:10:01 dev8-0 13.11 0.00 634.55 48.42 0.01 0.71 0.38 0.50
Run Code Online (Sandbox Code Playgroud)
对于我昨天开始的另一个线程,我也有这个后续问题:
小智 41
您可以使用pidstat使用以下命令每 20 秒打印每个进程的累积 io 统计信息:
# pidstat -dl 20
Run Code Online (Sandbox Code Playgroud)
每行将有以下列:
输出如下所示:
05:57:12 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command
05:57:32 PM 202 0.00 2.40 0.00 jbd2/sda1-8
05:57:32 PM 3000 0.00 0.20 0.00 kdeinit4: plasma-desktop [kdeinit]
05:57:32 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command
05:57:52 PM 202 0.00 0.80 0.00 jbd2/sda1-8
05:57:52 PM 411 0.00 1.20 0.00 jbd2/sda3-8
05:57:52 PM 2791 0.00 37.80 1.00 kdeinit4: kdeinit4 Running...
05:57:52 PM 5156 0.00 0.80 0.00 /usr/lib64/chromium/chromium --password-store=kwallet --enable-threaded-compositing
05:57:52 PM 8651 98.20 0.00 0.00 bash
05:57:52 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command
05:58:12 PM 202 0.00 0.20 0.00 jbd2/sda1-8
05:58:12 PM 3000 0.00 0.80 0.00 kdeinit4: plasma-desktop [kdeinit]
Run Code Online (Sandbox Code Playgroud)
mr.*_*tic 18
没有什么比持续监控更好的了,您根本无法在事件发生后取回对时间敏感的数据......
然而,有几件事你可以检查以暗示或消除——/proc是你的朋友。
sort -n -k 10 /proc/diskstats
sort -n -k 11 /proc/diskstats
Run Code Online (Sandbox Code Playgroud)
字段 10、11 是累积写入扇区和累积时间(ms)写入。这将显示您的热文件系统分区。
cut -d" " -f 1,2,42 /proc/[0-9]*/stat | sort -n -k +3
Run Code Online (Sandbox Code Playgroud)
这些字段是 PID、命令和累积 IO 等待滴答。这将显示您的热进程,但前提是它们仍在运行。(您可能想忽略文件系统日志线程。)
上述内容的有用性取决于正常运行时间、长时间运行的进程的性质以及文件系统的使用方式。
注意事项:不适用于 2.6 之前的内核,如果不确定,请查看您的文档。
(现在去帮你未来的自己一个忙,安装 Munin/Nagios/Cacti/任何 ;-)
小智 12
使用atop. ( http://www.atoptool.nl/ )
将数据写入压缩文件,atop稍后可以以交互方式读取。每 10 秒读取一次读数 (delta)。做 1080 次(3 小时;所以如果你忘记了它,输出文件不会让你用完磁盘):
$ atop -a -w historical_everything.atop 10 1080 &
Run Code Online (Sandbox Code Playgroud)
坏事再次发生后:
(即使它仍在后台运行,它也只是每 10 秒追加一次)
% atop -r historical_everything.atop
Run Code Online (Sandbox Code Playgroud)
既然你说 IO,我就按 3 个键:tdD
t - move forward to the next data gathering (10 seconds)
d - show the disk io oriented information per process
D - sort the processes based on disk activity
T - go backwards 1 data point (10 seconds probably)
h - bring up help
b - jump to a time (nearest prior datapoint) - e.g. b12:00 - only jumps forward
1 - display per second instead of delta since last datapiont in the upper half of the display
Run Code Online (Sandbox Code Playgroud)
使用btrace. 例如,它很容易使用btrace /dev/sda。如果该命令不可用,它可能在blktrace包中可用。
编辑:由于内核中未启用 debugfs,您可以尝试date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtf或类似的方法。记录页面错误当然与使用 btrace 完全不同,但如果你很幸运,它可能会给你一些关于最需要磁盘的进程的提示。我刚刚尝试了我最 I/O 密集型服务器之一,并列出了我知道消耗大量 I/O 的进程。
| 归档时间: |
|
| 查看次数: |
176103 次 |
| 最近记录: |