Linux-最初1分钟的性能优化命令
调查Linux性能问题,登陆Linux服务器,最初的1分钟怎么调查?
如果向Netflix这样,使用几百台EC2服务的公司来讲,肯定有一套他们自己的监视和诊断工具,例如;Atlas,Vector
但,对于普通用户而言,最初的1分钟,建议使用下面的10条命令来检测系统
uptime
$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
概要
用来快速确定系统负荷变化情况。
含义
表示
- 系统当前时间
- 系统稼动时间
- 接续的用户数
- 系统负荷情况(1分钟内,5分钟内,15分钟内的1个CPU的平均等待process数)
随着时间的推移显示系统负荷的指数变化。例如,上例中1分钟平均值是30,而15分钟内的平均值是19,显示了在那1分钟之内发生了一些CPU的处理要求。确定了有负荷变化后,利用后面提示的vmstat和mpstat进行进一步的确认。
dmesg | tail
dmesg -l emerg,alert,crit,err -x --color
(「emerg」「alert」「crit」「err」等级的信息,用颜色表示出来)
$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.
概要
表示系统信息。经常用来确认系统err等级。
含义
上例中显示,18694的程序已经出现内存溢出,并且出现大量的TCP连接在7001端口,导致请求放弃。
vmstat 1
$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
^C
概要
简单表示系统的假想内存的统计情报。
含义
- 参数的数字代表每秒的统计情报
- 第一行表示从启动系统到目前的平均统计情报
- r : CPU的实行中或者等待顺番的process数。r的值超过cpu数,说明cpu处于饱和状态。
free : kb单位的空的内存量。可以利用free -m命令进行进一步详细确认。
si, so : SwapIn / SwapOut的值,非0的值,说明内存不足。
us, sy, id, wa, st : 表示对cpu的平均值,分别代表用户时间,系统内核时间,空闲时间,IO等待时间,steal时间(其他客户machine或者xen等的驱动启动时间等) - 用 user 时间和 system 时间相加确认CPU是否处于busy状态
- IO等待时间显示一定数值表示disk有读取瓶颈,显示了有进程在等待IO读取,使CPU处于空闲状态
- 系统内核时间当然是要处理IO相关操作,超过20%使用时间,需要调查是否是内核的IO处理不够有效率。
上面的示例中显示,CPU时间几乎都是用户等级,也就是应用在使用90%以上的CPU,要调查「r」列的饱和程度。
mpstat -P ALL 1
Amazon Linux初期默认 未安装。
$ mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:38:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.78
07:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.99
07:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00
07:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00
07:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03
[...]
概要
用来确认CPU之间的平衡性,每一个CPU的CPU时间信息。
含义
只有一个CPU在忙,说明是个single thread application。
pidstat 1
Amazon Linux初期默认 未安装。
$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat
^C
概要
pidstat可以认为是 top的概要。
含义
上例表示,主要是2个java程序消费了CPU,%CPU列指的是对全CPU的使用率,1591%表示,java程序大约要占用16个CPU的使用
iostat -xz 1
Amazon Linux初期默认 未安装。
free -m
$ free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/+ buffers/cache: 23944 222053
Swap: 0 0 0
概要
系统内存使用情况。
含义
- buffers : 块存储设备的IO使用的buffer cache。
- cached : 文件系统使用的page cache。
sar -n DEV 1
Amazon Linux初期默认 未安装。
sar -n TCP,ETCP 1
$ sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:17:19 AM active/s passive/s iseg/s oseg/s
12:17:20 AM 1.00 0.00 10233.00 18846.00
12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:20 AM 0.00 0.00 0.00 0.00 0.00
12:17:20 AM active/s passive/s iseg/s oseg/s
12:17:21 AM 1.00 0.00 8359.00 6039.00
12:17:20 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:21 AM 0.00 0.00 0.00 0.00 0.00
^C
概要
系统的各种统计情报表示。System Admin Reporter的头字母的缩写。
和 top,vmstat 的最大区别是,sar 可以回溯之前的系统情报表示。
应用例;通过cron定期取得过去的情报,保存
安装
yum install sysstat
通过设置改变保存期间
vi /etc/sysconfig/sysstat
例;HISTORY=25(保存25天的情报)
含义
active/s : 每1秒的来自local的TCP连接数(例;connect()的连接数),理解为外向流
passive/s : 每1秒的来自远程的TCP连接数(例;accept()的连接数),理解为内向流
retrans/s : 每1秒的TCP再送数,显示网络或者服务器的问题信号
top
$ top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave
66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched
概要
系统实时情报