监控linux系统状态

原创
2019/06/12 09:25
阅读数 94

查看系统负载:

    w/uptime   最后面三个数字表示1分钟,5分钟,15分钟平均有多少个进程占用CPU
    占用CPU的进程可以是Running,也可以是Waiting
    某一时刻1颗CPU只能有一个进程在使用其资源

 

top命令:

     top 回车就可以进入到top界面
    每3秒刷新一次
    默认按cpu百分比排序,可以按M键按照内存使用率大小排序
    按数字1,可以显示所有CPU使用率详情

    top -bn1 静态显示所有进程的情况,也是按cpu百分比排序
    静态显示进程信息,方便在shell脚本中使用top命令

buffer和cached

    buffer : 这部分内存是从CPU产生即将写入到磁盘里去的那部分数据;  
    cached 这部分数据是先从磁盘里读出来,然 后临时存到内存里的那部分数据,

cat  /proc/cpuinfo  可以查看cpu的核数,也可以使用lscpu命令查看

free命令:

    free查看内存和swap使用情况,关注最后一列的available,这个数字是真正剩余的物理内存大小
    free   -k -m -g -h    //-k表示以KB单位显示  -m 表示MB单位显示  -g表示GB单位显示     -h表示以合适的单位进行显示

手动增加swap

    dd if=/dev/zero of=/bigfile bs=1M count=1000
    mkswap /bigfile
    chmod 600 /bigfile
    swapon /bigfile

 

监控磁盘:

    iostat --> yum install -y sysstat
    iostat  -dx 1
    iostat  -dx 1 5

    iotop --> yum install -y iotop
    iotop 回车  动态显示,按IO使用率大小排序

综合工具,断定瓶颈点:

    vmstat 1
    vmstat  1 10

    关注:r、b、si、so、bi、bo、id、wa

r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free   空闲的物理内存的大小

buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用116多M

cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt 等待IO CPU时间。

 

监控网卡流量:
    
    sar -n DEV 1 10


    yum install -y epel-release
    yum install nload
    nload 回车后查看网卡流量,动态显示

    ethtool ens33        查看网卡ens33的相关情况
    mii-tool ens33     查看网卡ens33的相关情况

sar -n DEV -f /var/log/sa/sa12   查看sar的相关历史文件

 

 

ps -aux

ps  -elf

USER //用户名
%CPU //进程占用的CPU百分比
%MEM //占用内存的百分比
VSZ //该进程使用的虚拟內存量(KB)
RSS //该进程占用的固定內存量(KB)(驻留中页的数量)
STAT //进程的状态
START //该进程被触发启动时间
TIME //该进程实际使用CPU运行的时间

其中STAT状态位常见的状态字符有
D //无法中断的休眠状态(通常 IO 的进程);
R //正在运行可中在队列中可过行的;
S //处于休眠状态;
T //停止或被追踪;
W //进入内存交换 (从内核2.6开始无效);
X //死掉的进程 (基本很少见);
Z //僵尸进程;
< //优先级高的进程
N //优先级较低的进程
L //有些页被锁进内存;
s //进程的领导者(在它之下有子进程);
l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ //位于后台的进程组;

 

 

抓包工具:

    tcpdump (安装:yum install -y tcpdump)
    tcpdump -nn -i ens33 port 80
    tcpdump -nn -i ens33 -c 100 -w 1.cap
    tcpdump -i ens33  -nn not port 22 and not port 80 and not host 192.168.222.1
    tcpdump -nn -r 1.cap

    wireshark  (安装:yum install -y wireshark)
    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"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部