系统很慢,是我们对性能出现瓶颈的直观感受。那么怎样诊断一个变慢了的系统的性能瓶颈呢?
CPU
1.top
可以查看CPU的整体使用率和空闲率
top -n 1只显示一次,查看进程消耗的CPU占比。
2. 查看CPU的数量/proc/cpuinfo和lscpu
3. 查看感兴趣进程的更多信息ps -lf3001
4. 查看此进程机器父进程的更多信息ps -o state,user,pid,ppid,nice,%cpu,cmd -p 3000,3001
5. 查看更多ps --forest -eouser,pid,ppid,%cpu,cmd
Memory:
free查看内存使用情况
查看 out of memory killer情况。journalctl | grep "Out of memory"。
检查某个特定进程的 memory 使用情况ps -eouser,pid,ppid,%mem,rss,vsize,comm | grep PROCESS_NAME
vmstat-n 10 5
Disk:
1.iostat-x 10 3查看是否有I/O带宽平并。跟vmstat一样,不要看第一次输出,那是从开机到目前的平均值,从第二次输出看起。
iowait值很高,CPU在等I/O,当然这并不意味着就是在等磁盘。
r/s ,w/s 便是没秒完成的读和写,await表示请求等待的平均时间(毫秒),%util表示此设备出来I/O请求用的CPU百分比。
2.mount命令查看挂载的磁盘
3. 如果找不到可以用ls -la /dev/dm-1
find -L /dev -samefile/dev/dm-1寻找所有链接到 .dev.dm-1的链接。
4.lvdisplay显示逻辑卷,用pvdisplay查看逻辑卷背后的物理卷。
5. 查找处于Uninterruptible sleep的进程,因为其可能占用很多I/O。ps -elf | grep " D "。再次用ps -elf --forest获得用户启动的处于D状态的进程的详细信息。
6. 查看相关进程机器父进程使用了多少I/O,cat /proc/PROCESS_ID/io
7.ps -elf | grep PROCESS_NAME查看进程id是否变化,查看此进程是否是一个存活时间很短的进程。
8. 用iotop来查看那些进程使用I/O最多。
Network:
ifstat跟vmstat和iostat一样,都需要从第二个输出看。
历史统计数据比较
/etc/cron.d/sysstat设置了sysstat定时运行的计划,/etc/sysstat/sysstat中可以查看到日志文件保存的目录。/var/log/sa/和/var/log/sysstat/分别是RHEL7和Ubuntu 16.04的默认log存放路径。
sar也可以查看iostat, top 以及vmstat查看到的信息。
CPU:
sar -u,查看某一天(7日)的用sar -f /var/log/sysstat/sa07 -u。
Memory:
sar -r
Disk:
sar -d -p
Network:
sar -n DEV