背景
在我们实际开发,在压测、系统出现问题(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
可以看到线程任务251个,251个sleeping,一开始会觉得奇怪为什么大部分都是sleeping的状态,这个其实在单核CPU的情况下,某一时刻只有CPU只能运行一个线程。多CPU多核的可以同时运行多个线程。我们看到系统使用的时候感觉像是并行在跑,是因为操作系统不停在做线程调度切换,由于调度的时间片很短,一般几十毫秒,用户感觉不出来。
* 查找java进程id快速方法 ps aux | grep java 。