60秒,linux性能瓶颈分析
目标
- Latency
多久完成一次请求处理或者操作; - Rate:
每秒的操作或请求速率; - Throughput
每秒传输数据大小; - Utilization
资源随时间繁忙程度; - Cost
成本,性价比
Resources
linux系统资源
- CPU
- Memory
- I/O
- Network
常用linux命令
- uptime
[root@LinServ-1 ~]# uptime -V #显示uptime命令版本信息
procps version 3.2.7[root@LinServ-1 ~]# uptime
15:31:30 up 127 days, 3:00, 1 user, load average: 0.00, 0.00, 0.00
说明:
15:31:30 //系统当前时间 up 127 days, 3:00
//主机已运行时间,时间越大,说明你的机器越稳定。 1 user //用户连接数,是总连接数而不是用户数
load average: 0.00, 0.00, 0.00 // 系统平均负载,统计最近1,5,15分钟的系统平均负载
那么什么是系统平均负载呢? 系统平均负载是指在特定时间间隔内运行队列中的平均进程数。
如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。
如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。
- dmesg
dmesg | tail 命令可以查看最后10条系统消息,Error消息会给出有用信息,如OOM及TCP丢弃请求等
- vmstat
vmstat 1命令每秒打印出虚拟内存相关metric;
r:表示正运行在CPU的进程数,值大于CPU核数说明系统繁忙了;
si, so:Swap-ins, swap-outs, 如果值为非零,说明内存不够用了;
us,sy,id,wa,st:user,kernel,ide,wait I/O及stolen time; - mpstat -P ALL 1每秒打印出各个CPU的运行状态
%waitio:等待I/O时间
%sys:系统调用时间 - pidstat
pidstat 1命令每秒打印出进程跑在哪个CPU核上以及使用率情况
- iostat
iostat -xz 1命令每秒打印出每块设备使用情况
r/s,w/s,rkB/s,wkB/s:每秒完成读写次数及数据大小;
await:平均等待I/O时间(单位是毫秒);
Avgqu-sz:发往设备的请求队列平均长度;
%util:设备使用率,值越大越繁忙; - free
free -m命令查看系统可用内存情况
- sar
sar -n DEV 1命令查看网卡收发是否达到上限
rxkB/s:每秒接收的数据包总数;
txkB/s:每秒传输的数据包总数; - sar2
sar -n TCP,ETCP 1命令查看网卡收发是否达到上限
active/s:每秒本地发起的TCP连接数(即调用connect());
passive/s:每秒远程发起的TCP连接数(即调用accept());
retrans:每秒TCP重传次数; - top
top命令double check系统和进程运行状态;