监控Linux系统状态的命令1 :w
uptime命令查看系统负载 :
w/uptime 最后面三个数字表示1分钟 ,5分钟 ,15分钟 平均有多少进程占用CPU
某一时刻1颗CPU只能有一个进程在使用其资源
监控Linux系统状态的命令2 :top,查看CPU
top命令 :
top 回车 就可以进入到top界面
每3秒刷新一次
默认按CPU百分比排序,可以按M键按照内存使用率大小排序
按数字1 ,可以显示所有的CPU使用率详情
top -bn1 静态显示所有进程的情况,也是按CPU百分比排序
静态显示进程信息 ,方便在shell脚本中使用top命令
监控Linux系统状态的命令3 :free,查看内存状态
free命令 : free查看内存和swap使用情况,关注最后一列的available ,这个数字是真正剩余的物理内存大小。
注意:直接执行free,单位是k或者字节
free -m #以兆为单位
free -k #显示的是默认的单位
监控Linux系统状态的命令4 :iostat
iostat监控磁盘 :
iostat /sar—> yum install -y systat
常见使用命令 : iostat -dx 1 #每隔一秒钟只查看读写速度一次,更详细
iostat -dx 1 5 #每隔一秒钟刷新一次,刷新5次
iotop -----> yum install -y iotop
iotop 回车 动态显示 , 按IO使用率大小排序
iostat命令查看,如果%util使用率太高,达到90多了,甚至超过100了,说明系统出问题了,磁盘性能严重下降了,只能更换磁盘。
iotop命令查看CPU,发现读、写、io,查找CPU占用的都很高的进程
iostat -d 1 #去掉cpu的部分,只查看读写速度
综合工具 ,断定瓶颈点 :
vmstat 1 #
vmstat 1 10 #每秒钟打印一次,打印10次。
关注 :r、b、si、so、 bi、bo、id、wa
监控Linux系统状态的命令5 :vmstat,可以同时查看磁盘、CPU、内存,三个
内存不足,现象:swpd下面的所有数字显示非0,或者si、so变成非0数字;
注意 :
si 相当于swap in ----> 从swap出去进入到内存里
so 相当于 swap out ----> 从内存出去进入swap到里
r 表示进程数,几个进程在占用CPU
b 表示被阻塞的进程的个数。
wa表示等待CPU的百分比
procs是进程相关的
memory是内存相关的
io是磁盘相关的
如果wa和b都大于0,说明系统出问题了。
system是软件使用的CPU
procs和system是软件方面的
memory、swap、io和CPU是硬件方面的
监控Linux系统状态的命令6 :sar查看CPU
监控网卡流量 :
sar -n DEV 1 10 #只查看网卡流量,每一秒钟刷新一次,刷新10次。
sar -n DEV -f /var/log/sa/sa21 # 查看21号的网卡流量
sar -b #查看磁盘容量
sar -q #系统负载,ldavg-1表示系统负载;ldavg-5查看历史系统负载
yum install -y epel-release #安装扩展源
yum install -y nload #
nload #直接输入nload命令,动态显示网卡流量 ,按上下的方向键,切换网卡。
ethtool ens33 #查看网卡ens33的具体信息
mii-tool ens33 #直接显示网卡的具体信息
查看28号的网卡具体的网卡流量,是根据系统启动的时间,作为标准, , DEV 表示网卡设备.
查看28号流量情况
因为只有一个网卡,所以只显示一个,
rxpck/s表示 网卡接收数据包的数量
txpck/s表示 网卡传送数据包的速度/流量
rxkB/s表示 网卡接收数据包的数量查看磁盘负载
Sar命令查看系统负载
查询具体ens33网卡的详细信息
Supported ports : 支持10M、100M、1000M ; 全双工,半双工;
Speed : 传输速度
Link detected : 目前的连接状态使用mii-tool ens33,直接查看网卡状态和流量
直接输入nload命令之后,按向右的方向键,切换到另一个网卡。
小常识 :
bit 比特 (带宽单位)
Byte 字节(速度传输单位)
100Mb带宽 单位 : Mbit / MByte 8bit = 1Byte , 下载速度2MB/s,换成带宽速度2*8=16Mbit ,100Mbit换成下载速度12.5MB/s.
监控Linux系统状态的命令7 :ps
查看进程 :
ps aux 、ps -elf、ps -eLf(查看线程)
STAT
S Sleep
R Running
s 父进程
N 低优先级
< 高优先级
+ 前台进程
l 多线程进程
Z 僵尸进程
ls -l /proc/pid/ #查看一个进程的一些详细信息。
监控Linux系统状态的命令8 :ss
查看网络连接状态 :
netstat -lnp(查看监听端口) 、netsat -lntp(查看TCP的链接)、netstat -lntup(查看TCP的链接)
netstat -an (查看系统所有的网络链接)
ss -an (查看系统所有的网络链接)
抓包工具 :
tcpdump
tcpdump -nn -i ens33 port 80 #抓指定网卡和端口的包
tcpdump -i ens33 -nn not port 22 and not port 80 and not host 192.168.1.120 #不抓指定端口、IP的包
tcpdump -nn -i ens33 -c 100 #指定抓100个包
tcpdump -nn -i ens33 -w 120.txt #把抓到的包,写入到120.txt文档中
tcpdump -r 120.txt #读取写入文档里面的抓的包
wireshark (yum install -y wireshark)
tshark -nn -i ens33 #抓网卡33的包
tshark -i ens33 -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" #查看某个I网址IP地址的网络流量
补充 :
查看CPU核数
cat /proc/cpuinfo
iscpu
buffer和cached的区别
buffer : 这部分内存是从CPU产生即将写入到磁盘里去的那部分数据
cached : 这部分数据是先从磁盘里读出来,然后临时存到内存里的那一部分数据。
cpu监控之二:dstat
dstat 2 10(每2秒采集一次共采集10次)
结果说明:
cpu:hiq、siq分别为硬中断和软中断次数
system:int、csw分别为系统的中断次数(interrupt)和上下文切换次数(context switch)。
dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。
这是默认输出显示的信息:
CPU状态:CPU的使用率。这项报告更有趣的部分是显示了用户,系统和空闲部分,这更好地分析了CPU当前的使用状况。如果你看到"wait"一栏中,CPU的状态是一个高使用率值,那说明系统存在一些其它问题。当CPU的状态处在"waits"时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。
磁盘统计:磁盘的读写操作,这一栏显示磁盘的读、写总数。
网络统计:网络设备发送和接受的数据,这一栏显示的网络收、发数据总数。
分页统计:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值是0 0。
系统统计:这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。
默认情况下,dstat每秒都会刷新数据。如果想退出dstat,你可以按"CTRL-C"键。
大多数常用的参数有这些:
-l :显示负载统计量
-m :显示内存使用率(包括used,buffer,cache,free值)
-r :显示I/O统计
-s :显示交换分区使用情况
-t :将当前时间显示在第一行
–fs :显示文件系统统计数据(包括文件总数量和inodes值)
–nocolor :不显示颜色(有时候有用)
–socket :显示网络统计数据
–tcp :显示常用的TCP统计
–udp :显示监听的UDP接口及其当前用量的一些动态数据
-c:表示只显示我们的CPU信息
-p:表示只显示我们的进程信息
-n:表示只显示我们的网络信息
例子:
查看全部内存都有谁在占用:
dstat -g -l -m -s --top-mem
显示一些关于CPU资源损耗的数据:
dstat -c -y -l --proc-count --top-cpu
如何输出一个csv文件
想输出一个csv格式的文件用于以后,可以通过下面的命令:
#dstat –output /tmp/sampleoutput.csv -cdn
strace命令
strace常用来跟踪进程执行时的系统调用和所接收的信号。
通用的完整用法:
strace -o output.txt -T -tt -e trace=all -p 28979
上面的含义是 跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。
查看在启动 dcopserver时到底程序做了什么:
#strace -f -F -o ~/dcop-strace.txt dcopserver
这里 -f -F选项告诉strace同时跟踪fork和vfork出来的进程,-o选项把所有strace输出写到~/dcop-strace.txt里 面,dcopserver是要启动和调试的程序。
mpstat命令
mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。报告CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
(1)显示所有的CPU信息:mpstat -P ALL 1(间隔为1s)
#mpstat -P ALL 5 2
显示了系统中 CPU 的各种统计信息。–P ALL 选项指示该命令显示所有 CPU 的统计信息,
而不只是特定 CPU 的统计信息。参数 5 2 指示该命令每隔 5 秒运行一次,共运行 2 次。
以上输出首先显示了所有 CPU 的合计指标,然后显示了每个 CPU 各自的指标。最后,在结尾处显示所有 CPU 的平均值。
列值的含义:
%user 表示处理用户进程所使用 CPU 的百分比。用户进程是用于应用程序(如 Oracle 数据库)的非内核进程。
在本示例输出中,用户 CPU 百分比非常低。
%nice 表示使用 nice 命令对进程进行降级时 CPU 的百分比。在之前的部分中已经对 nice 命令进行了介绍。简单来说,nice 命令更改进程的优先级。
%system 表示内核进程使用的 CPU 百分比
%iowait 表示等待进行 I/O 所使用的 CPU 时间百分比
%irq 表示用于处理系统中断的 CPU 百分比
%soft 表示用于软件中断的 CPU 百分比
%idle 显示 CPU 的空闲时间
%intr/s 显示每秒 CPU 接收的中断总数
(2)显示ID为1的CPU信息:mpstat -P 1 1(间隔为1s);
结果说明:
(1)user:在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程,值为 (usr/total)*100;
(2)nice:在internal时间段里,nice值为负进程的CPU时间(%),值为(nice/total)*100;
(3)system:在internal时间段里,核心时间(%),值为(system/total)*100;
(4)iowait:在internal时间段里,硬盘IO等待时间(%),值为(iowait/total)*100;
(5)irq:在internal时间段里,硬中断时间(%),值为(irq/total)*100;
(6)soft:在internal时间段里,软中断时间(%),值为(softirq/total)*100;
(7)idle:在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%),值为(idle/total)*100;
(8)intr/s:在internal时间段里,每秒CPU接收的中断的次数,值为(intr/total)*100;
Linux系统中的load average
linux系统中的Load对当前CPU工作量的度量。简单的说是进程队列的长度。
Load Average 就是一段时间 (1 分钟、5分钟、15分钟) 内平均 Load 。
上边0.31,0.30,0.31表示
第一位0.03:表示最近1分钟平均负载
第二位0.02:表示最近5分钟平均负载
第三位0.00:表示最近15分钟平均负载
注:linux系统是5秒钟进行一次Load采样
vmstat命令–监控CPU 性能分析
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写, 是实时系统监控工具。该命令通过使用knlist子程序和/dev/kmen伪设备驱动器访问这些数据,输出信息直接打印在屏幕。vmstat反馈的与CPU相关的信息包括:
(1)多少任务在运行
(2)CPU使用的情况
(3)CPU收到多少中断
(4)发生多少上下文切换
使用方法:
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:
root@ubuntu:~# vmstat 2 1 procs -----------memory---------- —swap–
-----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 3498472 315836
3819540 0 0 0 1 2 0 0 0 100 0
2表示每个两秒采集一次服务器状态,1表示只采集一次。
Linux下vmstat输出释疑:
Vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 100152 2436 97200 289740 0 1 34 45 99 33 0 0 99 0
procs
r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。当这个值超过了CPU数目,就会出现CPU瓶颈了。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
id 列显示了cpu处在空闲状态的时间百分比。空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
system 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
memory
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常。否则,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free 当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap
si 由内存进入内存交换区数量。
so由内存交换区进入内存数量。
IO
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。