linux查看系统进程和线程

背景

在我们实际开发,在压测、系统出现问题(load高、CPU使用率高、RT高等)的时候我们需要去排查,得先看些系统基本信息,便于我们定位问题。

top命令

  • 查看进程命令top 可以看到linux系统中内存,load,CPU使用率等等,还有所有的进程信息。
    另外如果想让内容单位显示g,可以top -M。
  • 参数:
    -b 批处理
    -c 显示完整的治命令
    -I 忽略失效过程
    -s 保密模式
    -S 累积模式
    -i<时间> 设置间隔时间
    -u<用户名> 指定用户名
    -p<进程号> 指定进程
    -n<次数> 循环显示的次数
    top - 23:14:38 up 33 days, 10:32, 1 user, load average: 0.05, 0.05, 0.05
    Tasks: 31 total, 1 running, 29 sleeping, 0 stopped, 1 zombie
    Cpu(s): 0.7%us, 0.7%sy, 0.0%ni, 97.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.8%st
    Mem: 4096.000M total, 1621.660M used, 2474.340M free, 0.000k buffers
    Swap: 2047.996M total, 0.000k used, 2047.996M free, 1529.891M cached
    解释:
  • 当前系统时间 : 23:14:38,系统运行时长: up 33 days, 10:32 单位 时:分。
  • 1 user 一个登陆用户,load average 系统负载 1分钟,5分钟 ,15分钟的平均值。
  • 总进程数 31个,1个正在运行,29个睡眠,0个停止,1个僵尸进程。
  • CPU占用率, us:用户空间CPU占用,sy:内核空间CPU占用,ni:用户空间中改变进程优先级的占比,id:CPU空闲率;
  • 内存:total 总物理内存4G,1.6G被使用,2.4G空闲
  • 交换区: 交换区总容量2G,使用0,2G空闲,1.5G 缓存交换区,;

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    2393 root 20 0 604m 18m 10m S 1.0 0.5 40:05.75 staragent-core

  • 在javaweb开发中,我们经常的web容器tomcat,就是一个进程多线程来处理每个线程,有些我们想看进程中各个线程的使用情况,查看具体某个进程中的线程可以使用如下命令:
    top -Hp 进程id
    linux查看系统进程和线程
    可以看到线程任务251个,251个sleeping,一开始会觉得奇怪为什么大部分都是sleeping的状态,这个其实在单核CPU的情况下,某一时刻只有CPU只能运行一个线程。多CPU多核的可以同时运行多个线程。我们看到系统使用的时候感觉像是并行在跑,是因为操作系统不停在做线程调度切换,由于调度的时间片很短,一般几十毫秒,用户感觉不出来。
    * 查找java进程id快速方法 ps aux | grep java 。