1.top命令(最常用的性能分析工具)
top - 10:38:50 up 220 days, 11:36, 2 users, load average: 0.23, 0.28, 1.22
Tasks: 755 total, 4 running, 751 sleeping, 0 stopped, 0 zombie
Cpu(s): 6.7%us, 4.5%sy, 0.0%ni, 87.0%id, 0.0%wa, 0.0%hi, 1.8%si, 0.0%st
Mem: 65956496k total, 56346988k used, 9609508k free, 47104k buffers
Swap: 12582904k total, 7947060k used, 4635844k free, 842860k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2608 redis 20 0 6176m 4.4g 848 S 9.9 7.0 49990:48 codis-server
14551 admin 20 0 38.7g 1.0g 2824 S 9.9 1.6 29398:48 java
16471 www 20 0 144m 45m 932 S 2.6 0.1 8475:36 nginx
16473 www 20 0 137m 41m 932 S 2.3 0.1 8493:40 nginx
16474 www 20 0 145m 52m 932 S 2.3 0.1 8586:39 nginx
通过top命令,可以看到
- 时间信息:当前时间10:38:50;系统运行时间up 220 days, 11:36;
- 用户信息:当前登录用户数2 user;
- 系统负载(1min,5min,15min到现在的平均值)load average: 0.23, 0.28, 1.22(值越少,说明处理的越快,越好);
- 进程信息(总进程数,正在运行进程数,睡眠进程数,停止进程数,僵尸进程数)Tasks: 755 total, 4 running, 751 sleeping, 0 stopped, 0 zombie;
- CPU信息(用户空间占比,系统空间占比,用户进程空间内改变过优先级的进程占用CPU百分比,空闲CPU占比,等待输入输出的CPU占比,软中断占比,硬中断占比,潜性空间占比)Cpu(s): 6.7%us, 4.5%sy, 0.0%ni, 87.0%id, 0.0%wa, 0.0%hi, 1.8%si, 0.0%st;
- Memory信息(物理内存总量,使用的物理内存量,空闲的内存量,用作内核缓存的内存量)Mem: 65956496k total, 56346988k used, 9609508k free, 47104k buffers;
- 交换区信息(交换区总量,使用量,空闲量,缓存的交换区量)Swap: 12582904k total, 7947060k used, 4635844k free, 842860k cached;
- 进程列表信息(进 程id,进程所有者的用户名,优先级,nice值[负值表示高优先级,正值表示低优先级],进程的虚拟内存总量[VIRT=SWAP+RES]kb,进程 正在使用未被换出的物理内存大小[RES=CODE+DATA]kb,共享内存大小kb,进程状态[D=不可中断的睡眠状态、 R=运行、S=睡眠、T= 跟踪/停止、Z=僵尸进程],上次更新到现在的CPU占比、进程使用的物理内存占比、进程使用的CPU时间总计0.01s、命令)PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2.uptime和w命令(负载查询)
-
uptime命令
10:46:12 up 220 days, 11:44, 2 users, load average: 0.36, 0.28, 0.85
通过uptime命令,我们可以获取到如top第一行一样的负载信息(10:46:12 up 220 days, 11:44, 2 users, load average: 0.36, 0.28, 0.85)
-
w命令
10:46:43 up 220 days, 11:44, 2 users, load average: 0.26, 0.26, 0.82 USER TTY LOGIN@ IDLE JCPU PCPU WHAT root pts/0 Thu19 1:28m 0.04s 0.04s -bash admin pts/1 10:37 0.00s 0.03s 0.01s w
通过w命令查看,我们可以获取到如top第一行一样的负载信息(10:46:43 up 220 days, 11:44, 2 users, load average: 0.26, 0.26, 0.82)。另外可以获得每个用户的登录名(USER)、终端(TTY,pts是虚拟终端)、登录机器的IP(FROM)、登录的时间(LOGIN@)、 空闲时间(IDLE)、JCPU(用户对应终端上所有进程执行的时间)、PCPU(当前这个进程所使用的时间)、当前正在运行的命令(WHAT)
3.free和vmstat命令(内存查询)
-
free命令
total used free shared buff/cache available Mem: 64410 53463 9537 13 1409 10603 Swap: 12287 7760 4527
通过free命令,我们可以获取到物理内存的大小、缓存的大小、交换区的大小(总量、使用量、空闲量、共享量、内核缓存、缓存的交互区量)。
同top的Mem比较:可以看出free命令不仅可以获得物理内存的大小,还可以获得缓存区、交换区的大小。
注意:当Mem中的used接近total时,不要说内存快用完了。再看看缓存的大小,因为缓存也可以去当物理内存使用。
free [-b/-k/-m/-g] 显示的物理内存量分别以bytes/KB/MB/GB为单位。free命令不带参数,默认和free –k命令一致。
-
vmstat命令
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 7946948 9894296 29632 1293112 2 0 12 76 0 0 23 17 60 0 0
通过vmstat命令,我们可以获取到等待执行的任务数(r),等待IO的进程数量(b),正在使用的虚拟内存(swpd),空闲内存(free),块设 备进行读写的缓存(buff),文件系统缓存(cache),每秒从交换区写入内存的大小(si)kb/s,每秒从内存写到交换区的大小(so),每秒读 取磁盘的块数(bi),每秒写入磁盘的块数(bo),每秒中断数(in),上下文切换数(cs),用户进程耗cpu的时间(us),系统耗cpu的时间 (sy),空闲时间(id),等待io时间(wa),潜行时间(st)
4.netstat命令(网络查询 )
-
netstat
Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 4*.**2.**1.1*2:http 1*1.1**.1*4.*6:*7*8 SYN_RECV
通过netstat命令,我们可以获取到Active Internet connections(有源TCP连接),以及网络中的协议、接收队列、发送队列(一般情况下,接收队列和发送队列为0;如果不是,则表示软件包正在队 列中堆积)、本地地址、外部地址、协议的状态。网络信息具体的有网络连接,路由表,接口状态,masquerade 连接,多播成员等。
另外还有一种Active UNIX domain sockets(有源Unix域套接口,和网络套接字一样,但是只能用于本机通信,性能可以提高一倍),以及网络协议、连接到本套接口上的进程号、标识、 套接口类型、套接口当前状态、i结点、连接到套接口的其他进程使用的路径名。
netstat的相关参数说明:
-a(可以看到上面两类)。
-t (仅显示tcp相关选项)
-u (仅显示udp相关选项) 在两台服务器上都没有该项内容,上个QQ,应该就有了。
-l (仅显示又在Listen监听的服务状态)
-r (仅显示路由信息)
-p (仅显示建立链接的程序名)
-s (按各个协议进行统计)
-e (显示扩展信息)
5.df -h命令(磁盘消耗情况)
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 97G 2.0G 90G 3% /
/dev/sda5 1.7T 35G 1.6T 3% /data
/dev/sda1 99M 12M 83M 12% /boot
tmpfs 8.0G 0 8.0G 0% /dev/shm
通过df –h命令,我们可以获取到文件系统的类别,大小,使用量,空闲量,使用率,挂载点等信息。tmpfs是一种基于内存的文件系统。
6.iostat命令(磁盘I/O状态)
iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。
1.命令格式:
iostat[参数][时间][次数]
2.命令功能:
通过iostat方便查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息。
3.命令参数:
-C 显示CPU使用情况
-d 显示磁盘使用情况
-k 以 KB 为单位显示
-m 以 M 为单位显示
-N 显示磁盘阵列(LVM) 信息
-n 显示NFS 使用情况
-p[磁盘] 显示磁盘和分区的情况
-t 显示终端和CPU的信息
-x 显示详细信息
-V 显示版本信息
Linux 2.6.32-279.el6.x86_64 (zk2.******.com) 09/08/2017 _x86_64_ (24 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
22.92 0.00 17.45 0.06 0.00 59.57
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 7.17 436.16 14.06 14.21 553.40 3602.94 147.04 0.17 6.18 0.99 2.79
说明:
- cpu属性值说明:
%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。
备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。 - disk属性值说明:
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
avgqu-sz: 平均I/O队列长度。
await: 平均每次设备I/O操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。