查看机器负载常用姿势总结

<1> load average

  先来看一下linux中存活状态下进程的粗略分类:

    a. blocking process, 可能在等在IO或者自己调用wait系列的函数

    b. runnable process, 所有资源一切就绪,就差cpu了,在任务队列里排队等待cpu资源

    c. running process, 正在cpu上运行的进程

  load average 被定义为,在特定的时间间隔,runnable process + running process 的平均数量。这个平均数量是使用cpu平均的。这里cpu应该视为核心,也就是说,两个物理cpu和一个双核cpu是一样的,会被统一当做2个cpu核心来计算负载。常用的获取 load average的方式有top和uptime命令2种。以uptime命令为例:

    

  最开头的一系列信息代表当前时间和机器已经运行的时间(已经运行了1070天零5小时7分钟)。6 users 代表当前一共有6个用户登录。最后3个数字就是 load average, 分别是1分钟,5分钟,15分钟的 load average。

  以一颗cpu核心的机器为例。load average 在 0 到 1 之间表示 cpu 还有剩余资源,进程运行通畅。等于1表示系统已经没有剩余的cpu资源了,对于多个进程满打满算刚够用。如果超过1,则说明系统此时正在超负荷运行。load average 一般维持在0.7左右比较好。对于2个cpu核心的机器,那么load average超过2才说明系统正在超负荷运行。其他的以此类推。

 

<2>查看进程使用的内存大小

  a. 直接 cat /proc/$pid/status

  

  VmRss代表进程占用的物理内存。

  b. pmap -x $pid

  该命令最后一行会输出如下信息,中间的那个数字就是进程占用的物理内存

  

  c. 使用top命令后,按下M,会按照内存使用从大到小进行排序

  

  VIRT, RES, SHR 分别代表进程使用的虚拟内存,物理内存,共享内存大小

 

 <3> 机器连接数

  主要使用netstat,比如统计连接中各个状态的数量:

  netstat -a | awk '/^tcp/ {++STATE[$NF]} END {for(a in STATE) print a, STATE[a]}'

  

 

posted @ 2018-08-14 22:31  Frogjie  阅读(238)  评论(0编辑  收藏  举报