Linux 鸟哥私房菜-总结篇-性能命令

想要了解系统的平均负载,可以借助一些linux命令。

[uptime]

-s 从某时刻以来的系统负载 yyyy-mm-dd MM:HH:SS

13:57:57 up 4:16, 1 user, load average: 0.00, 0.01, 0.05

跟w命令的第一行是一样的。

[vmstat] 动态的了解,系统资源运作。

CPU 内存 磁盘输入输出的状态

-a 显示活跃和非活跃内存
-f 显示从系统启动至今的系统复制(fork)的进程数量
-S 让显示的数据有单位,参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-s 将一些事件(从开机到现在)导致的内存变化情况

vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 166412 34724 324184 0 0 21 4 62 135 1 0 99 0 0

一 进程字段

1. r 代表可运行进程的数量(正在运行或等待运行时)。
2. b 不可唤醒的进程数量
ps: 这俩越多表明系统太忙。很多进程就无法被执行或者一直等待而无法被唤醒。

二 内存字段

1. swpd 虚拟内存
2. free 空闲的物理内存
3. buff 用于缓冲存储器
4. cache 用于高速缓存

三 内存置换空间

1. si 从磁盘中将进程取出的量(每秒从交换区写到内存的大小)
2. so 由于内存不足而将没用到的进程写入到磁盘的swap容量(每秒写入交换区的内存大小)
ps: 如果si/so 数值太大,表示内存内的数据常常得在磁盘与主存储器之间传来传去,系统效能会差

四 IO 磁盘读写的项目

1. bi 由磁盘读取的区块数量
2. bo 写入到磁盘去的区块数量

ps: 如果这部分值很高,代表系统的I/O 非常忙碌

五 系统项目
1. in 每秒被中断的次数,包括时钟中断
2. cs 每秒上下文切换
ps 这两个数值越大,代表系统与接口设备沟通的非常频繁(接口社保包括:磁盘,网络卡,时间钟等)

六 CPU项目

1. us 非核心层的CPU使用状态
2. sy 核心层所使用的CPU状态
3. id 闲置的状态
4. wa 等待I/O 所耗费的CPU状态
5. st 被其虚拟机所盗用的CPU状态

[dstat]

dstat命令是一个全能系统信息统计工具。与sysstat相比,dstat拥有一个彩色的界面,在手动观察性能状况时,数据比较显眼容易观察;而且dstat支持即时刷新,譬如输入dstat 3即每三秒收集一次,但最新的数据都会每秒刷新显示。和sysstat相同的是,dstat也可以收集指定的性能资源,譬如dstat -c即显示CPU的使用情况

dstat
默认参数 -cdngy
-a 等同于cdngy
-c 显示CPU系统占用,用户占用,空闲,等待,中断,软件中断等信息。
-d 显示磁盘读写数据大小。
-n 显示网络状态
-g 显示paging那部分
-p 显示进程状态
-y 显示系统的中断,上线文切换
-l 显示系统负载情况
-r 显示io情况
-s swap情况
-m:显示内存使用情况

----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- --io/total-
usr sys idl wai hiq siq| read writ| recv send| in out | int csw | read writ
1 0 99 0 0 0| 12k 8083B| 0 0 | 0 0 | 77 134 |0.66 0.30
0 0 100 0 0 0| 0 0 |2349B 1378B| 0 0 | 61 115 | 0 0
0 0 100 0 0 0| 0 4096B| 900B 500B| 0 0 | 52 95 | 0 1.00
0 0 100 0 0 0| 0 0 |4077B 516B| 0 0 | 70 125 | 0 0

hiq :hardware interrupt 硬中断
siq : 软中断

进阶用法:http://dag.wiee.rs/home-made/dstat/
/**
latency
英 /'leɪtənsɪ/ 美 /'letnsi/
n. 潜伏;潜在因素
**/

dstat -c --top-cpu -d --top-bio --top-latency

----total-cpu-usage---- -most-expensive- -dsk/total- ----most-expensive---- --highest-total--
usr sys idl wai hiq siq| cpu process | read writ| block i/o process | latency process
1 0 99 0 0 0|java 0.2| 12k 7995B|init 6331B 38B|rcuos/0 187
1 1 98 0 0 0| | 0 0 | |rcuos/0 288
1 0 98 0 0 1|mysqld 1.0| 0 0 | |nginx: worker 236
2 0 98 0 0 0| | 0 4096B| |nginx: worker 138
1 1 98 0 0 0|java 1.0| 0 0 | |nginx: worker 77
1 1 98 0 0 0| | 0 0 | |rcu_sched 332
0 0 100 0 0 0| | 0 20k|jbd2/sda1-8 0 12k|rcuos/0 322
2 0 98 0 0 0| | 0 0 | |nginx: worker 125
1 1 98 0 0 0| | 0 0 | |nginx: worker 121

更多的top插件,请参考dstat --list

dstat -c --top-cpu -d --top-bio --top-latency --dstat-mem --top-oom
cpu disk 内存 内存溢出

Terminal width too small, trimming output.
----total-cpu-usage---- -most-expensive- -dsk/total- ----most-expensive---- --highest-total-- ---dstat-memory-usage-->
usr sys idl wai hiq siq| cpu process | read writ| block i/o process | latency process |virtu resid share data>
1 0 99 0 0 0|java 0.2| 11k 7852B|init 6179B 37B|rcuos/0 184| 34k 7528B 2824B 4556B>
1 0 99 0 0 0|java 1.0| 0 0 | |rcu_sched 318| 35k 7704B 2836B 4944B>
2 0 98 0 0 0| | 0 0 | |nginx: worker 110| 35k 7716B 2836B 4944B>
2 1 97 0 0 0| | 0 0 | |nginx: worker 114| 35k 7740B 2836B 4944B>
2 1 97 0 0 0| | 0 0 | |rcuos/0 278| 35k 7740B 2836B 4944B>
0 1 99 0 0 0| | 0 0 | |nginx: worker 104| 35k 7740B 2836B 4944B>
1 2 97 0 0 0| | 0 12k|jbd2/sda1-8 0 4096B|nginx: worker 199| 35k 7740B 2836B 4944B>
0 1 99 0 0 0| | 0 0 | |nginx: worker 198| 35k 7740B 2836B 4944B>
2 1 97 0 0 0| | 0 0 | |nginx: worker 104| 35k 7740B 2836B 4944B>
1 1 98 0 0 0|VBoxService 1.0| 0 0 | |rcuos/0 257| 35k 7740B 2836B 4944B>
1 1 98 0 0 0|java 1.0| 0 0 | |nginx: worker 91| 35k 7740B 2836B 4944B>
1 1 98 0 0 0| | 0 0 | |nginx: worker 141| 35k 7740B 2836B 4944B>
1 1 98 0 0 0| | 0 0 | |nginx: worker 123| 35k 7740B 2836B 4944B>
1 1 98 0 0 0| | 0 0 | |nginx: worker 115| 35k 7740B 2836B 4944B>
2 0 98 0 0 0| | 0 0 | |rcuos/0 293| 35k 7740B 2836B 4944B>
1 1 98 0 0 0| | 0 0 | |rcu_sched 149| 35k 7748B 2836B 4944B>^C

[pidstat]
报告linux任务统计
-C 后跟命令名 (可以为正则表达式)
-u:默认的参数,显示各个进程的cpu使用统计
-r:显示各个进程的内存使用统计
-d:显示各个进程的IO使用情况
-p:指定进程号
-w:显示每个进程的上下文切换情况

pid -w -p 22881

06:40:39 PM PID cswch/s nvcswch/s Command
06:40:39 PM 22881 0.00 0.00 php-fpm

PID 进程号
cswch context switch 每秒自原切换任务的上下文总数

所谓自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换
比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换

nvcswch/s involuntary context switch 每秒非自原切换任务的上下文总数

而非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换,比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换

进程上下文切换几种场景

其一,为了保证所有进程可以得到公平调度,CPU 时间被划分为一段段的时间片,这些时间片再被轮流分配给各个进程。这样,当某个进程的时间片耗尽了,就会被系统挂起,切换到其它正在等待 CPU 的进程运行。

第二种,前后两个线程属于同一个进程。此时,因为虚拟内存是共享的,所以在切换时,虚拟内存这些资源就保持不动,只需要切换线程的私有数据、寄存器等不共享的数据。

其三,当进程通过睡眠函数 sleep 这样的方法将自己主动挂起时,自然也会重新调度。

其四,当有优先级更高的进程运行时,为了保证高优先级进程的运行,当前进程会被挂起,由高优先级进程来运行。

最后一个,发生硬件中断时,CPU 上的进程会被中断挂起,转而执行内核中的中断服务程序。

pidstat -r

07:01:43 PM PID minflt/s majflt/s VSZ RSS %MEM Command
07:01:43 PM 1 0.00 0.00 19232 1524 0.00 init
07:01:43 PM 573 0.00 0.00 10640 748 0.00 udevd

-r 报告页面错误和内存利用率。

PID
进程id

minflt/s
任务每秒发生的小故障总数,这些小故障不需要从磁盘加载内存页。

majflt/s
任务每秒发生的主要错误总数,即需要从磁盘加载内存页的错误。

VSZ
Virtual Size:
整个任务的虚拟内存使用量(以千字节为单位)。

RSS
Resident Set Size:
任务使用的物理内存(单位为千字节)。

pid -d 显示各个进程的IO使用情况

Report I/O statistics (kernels 2.6.20 and later only). The following values are displayed:

kB_rd/s

任务每秒从磁盘读取的千字节数。

kB_wr/s

任务每秒写入磁盘的千字节数。

kB_ccwr/s

任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生

07:02:34 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command
07:02:34 PM 7324 0.00 0.00 0.00 sftp-server
07:02:34 PM 7621 0.00 0.00 0.00 bash
07:02:34 PM 18954 0.00 0.00 0.00 nginx
07:02:34 PM 18956 0.00 0.00 0.00 nginx
07:02:34 PM 18957 0.00 0.00 0.00 nginx
07:02:34 PM 18960 0.00 0.00 0.00 nginx
07:02:34 PM 18961 0.00 0.00 0.00 nginx
07:02:34 PM 18962 0.00 0.00 0.00 nginx
07:02:34 PM 18963 0.00 0.00 0.00 nginx
07:02:34 PM 18964 0.00 0.00 0.00 nginx

哎哟,写日志真TM累啊~~

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注