系统资源命令
当前系统负载
w查看的是整体的负载,可以来观察当前系统有没有压力
1 | w |
第一行显示的内容依次为:时间、系统运行时间、登录用户数、平均负载(1分钟、5分钟、15分钟)
第二行后展示的信息为:当前登录的都有哪些用户、在哪里登录的等信息
平均负载不要高于设备核心数
系统资源查看
vmstat命令
使用vmstat命令可以更加细化w命令,来查看具体是哪里的压力
显示内存、分页、块传输和CPU活动的相关信息,评估cpu性能
1 | vmstat [刷新延时 刷新次数] |
结果信息
procs 进程
- r 等待cpu时间片和运行的进程数,数量越大,系统越繁忙,如果长期大于服务器cpu,则说明cpu不够用了
- b 等待资源的进程数,如等待IO、内存等,数量越大,系统越繁忙,如果该值长时间大于1,需要关注一下
memory 内存
- swpd 切换到交换分区的内存大小,单位kb,如果swpd的值不为0,或者比较大,只要si和so的值长期为0就不用担心
- free 空闲的内存容量,单位kb
- buff buffers cache的内存容量,即将写入磁盘的,单位kb,一般对块设备的读写才需要缓冲
- cache page cached的内存容量,从磁盘中读取的,单位kb,一般作为文件系统进行缓存,频繁访问的文件都会被缓存。如果cache值比较大,说明缓存的文件数较多,如果此时io中的bi比较小,说明文件系统效率比较好
swap 交换分区,这两个数越大,说明内存不够用了,内存中的数据频繁交换到交换分区中,对系统性能影响极大
- si 每秒从内存进入交换区的数据的容量
- so 每秒从交换区进入内存的数量
io 磁盘IO,这两个数越大,代表磁盘IO越繁忙。如果bi+bo超过1000,而且wa值较大,表示系统磁盘IO有问题
- bi 从块设备读取数据的总量,读磁盘 kb/s
- bo 从块设备写入数据的总量,写磁盘 kb/s
system 系统信息,显示采集间隔内发生的中断次数,这两个数越大,表示系统与接口设备的通信越繁忙,由内核消耗的CPU时间越多
- in 某一时间间隔内观测到的每秒被中断的进程次数
- cs 每秒进行事件切换次数(上下文切换的次数)
cpu CPU信息,如果us+sy大于80%,说明可能存在cpu资源不足
- us 用户进程消耗CPU运算时间的百分比,如果长期大于50%,需要考虑优化程序
- sy 内核进程消耗CPU运算时间的百分比
- id 空闲CPU的时间百分比
- wa 等待IO所消耗的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa超过20%,说明IO等待严重,引起IO等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或磁盘控制器的带宽瓶颈造成的
- st 被虚拟机所盗用的CPU占比
iostat命令
显示平均磁盘活动和处理器负载情况
1 | iostat [刷新延时 刷新次数] |
%user 在用户级别执行
%nice 以nice优先方式在用户级别执行
%system 在系统级别执行(内核进程)
%iowait 等待IO
%steal 等待虚拟进程
%idle 空闲时间
tps 每秒处理的IO请求数,kB_read/s每秒从设备读取的数据量, kB_wrtn/s每秒向设备写入的数据量, kB_read读取的数据总量, kB_wrtn写入的数据总量
查看硬盘的IO性能
1 | iostat -d -x -k 1 5 |
这里一般看两个参数
- %util 如果达到100%,说明产生的IO请求太多,IO系统已经满负荷了,磁盘存在瓶颈
- await 这个响应时间应该低于5ms,如果大于5ms表示磁盘IO压力很大,考虑更换响应速度更快的磁盘
ifstat命令
网络io
1 | ifstat |
iftop命令
列出主机与远程ip之间占用大部分带宽的网络连接
1 | iftop -ieth1 -nP |
进入iftop页面后还可以对页面进行调整,参数如下
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或IP排序;
按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控
pidstat
pidstat是一个多功能的诊断工具
1 | 可以监控cpu |
free命令
显示内存使用率
1 | free |
使用 free -h 可以展示为使用K或M或G为单位
第一行是内存信息:total表示总内存数,used表示已经使用的,free表示空闲的,shared表示多个进程共享的,buffers表示缓冲内存数,cached表示缓存内存数
第二行是缓冲缓存信息:-/buffers/cache(正在使用的) 相当于 used-buffers-cached,+/buffers/cache(可用的内存) 相当于 free+buffers+cached
如何回收buff/cache
echo 1 > /proc/sys/vm/drop_caches # 仅清除页面缓存
echo 2 > /proc/sys/vm/drop_caches # 清除目录项和inode
echo 3 > /proc/sys/vm/drop_caches # 清除页面缓存、目录项以及inode
buff/cache
占用高是没有影响的,其实是用来减少对磁盘的访问操作,提高IO速度的,只要available足够使用就可以,当available不足以分配的时候,linux会自动触发内存回收的工作
第三行是分区信息:total是swap的总数,used是已经使用的,free是空闲的,当上面提到的+buffers/cache表示的可用内存都已使用完,新的读写请求过来后,会把内存中的部分数据写入磁盘,从而把磁盘的部分空间当做虚拟内存来使用
如果swap内存使用过多,则说明物理内存已经不够用了,操作系统将本应该物理内存存储的一部分内存页调度到磁盘上,以腾出足够的空间给当前的进程使用。当其他进程需要运行时,在从磁盘将内存的页调度到物理内存中,以恢复进程的运行。这个调度的过程,则会产生swap IO,如果swap IO较为频繁,会影响系统的性能,可以使用vmstat来查看swap IO的情况
可以配合vmstat来观察swap的IO情况
查看CPU/内存信息
在/proc文件夹中有cpuinfo和meminfo可以查看CPU和内存信息
cpuinfo
查看物理CPU个数
1 | 具有相同physical id的cpu是同一个CPU封装的线程或核心 |
查看每个cpu中core的核数
1 | cat /proc/cpuinfo | grep 'cpu cores' | uniq |
查看逻辑CPU的个数
1 | cat /proc/cpuinfo | grep 'processor' | wc -l |
查看有几个逻辑cpu,包括cpu型号
1 | cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c |
一般服务器显示的都是逻辑CPU个数
uptime命令
显示系统运行了多长时间
1 | uptime |
sar命令
显示系统活动报告,可以全面获取系统的CPU、运行队列、磁盘IO、分页、内存、CPU中断、网络等性能数据
查看网络运行状态
1 | sar [options] [-o filename] [interval] [count] |
这里要注意一下,如果rxpck/s数值大于4000,或者rxkB/s大于5000的时候,需要观察一下是否有异常,流量有些高
也可以查看某一天的网卡流量
1 | sa21是文件名 |
查看平均负载
1 | sar -q 10 3 |
查看CPU使用率
1 | sar -u 10 3 |
查看某个CPU运行负载,程序使用了单线程,可能会有整体CPU使用率不高,但是某个CPU飚满的情况
1 | CPU是从0开始计数的,1表示的是第二个CPU |
查看系统磁盘情况
1 | sar -d 3 5 |
查看内存使用情况
1 | sar -r 3 5 |
选项
- -A 显示系统所有资源设备(CPU、内存、磁盘)的运行状况
- -u 显示系统所有CPU在采样时间内的负载状态
- -P 显示当前系统中指定CPU的使用情况
- -d 显示系统所有硬盘设备在采样时间内的使用情况
- -r 显示系统内存在采样时间内的使用使用情况
- -b 显示缓冲区在采样时间内的使用情况
- -v 显示进程、文件、节点和锁表状态
- -n 显示网络运行状态。参数后边可跟DEV、EDEV、SOCK、FULL。DEV显示网络接口信息;EDEV显示网络错误的统计信息;SOCK显示套接字信息;FULL显示前三个参数的所有信息
- -q 显示运行队列的大小,与系统当时的平均负载相同
- -R 显示进程在采样时间内的活动情况
- -y 显示终端设备在采样时间内的活动情况
- -w 显示系统交换活动在采样时间内的状态
- -o filename 表示将命令结果以二进制格式存放在文件中
- interval 采样时间间隔
- count 采样次数
lsmod命令
查看已载入系统的模块,是list modules的缩写,其查看的是/prco/modules中的内容
1 | lsmod |