概念:top命令是Linux下常用的系统性能分析工具,能实时查看系统中各个进程资源占用情况。
参数:
-p 指定进程号 eg:top -p PID 查看进程ID为PID的进程-H 查看各个线程资源占用的情况。 eg:top 查看各个进程 资源占用的情况。 top -H 查看各个线程 资源占用的情况。 top -Hp PID 查看进程ID为PID的进程中 所有线程 的资源占用情况。 -c 查看进程的完整命令(COMMAND) eg:top -c 查看各个进程 资源占用的情况,其中命令(COMMAND)项显示详细信息。 -n 更新n次后,退出top命令。 eg:top -n 5 更新5次后,停止更新并退出top命令。
1)系统资源占用情况:
top - 15:17:57 up 366 days, 21:32, 1 user, load average: 0.03, 0.17, 0.14Tasks: 724 total, 1 running, 723 sleeping, 0 stopped, 0 zombieCpu(s): 0.4%us, 0.1%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%stMem: 132042876k total, 101359588k used, 30683288k free, 171176k buffersSwap: 20971512k total, 407892k used, 20563620k free, 26919260k cachedtop:当前时间、系统启动时间、当前系统登录用户数目、平均负载Tasks:进程总数、运行进程数、睡眠进程数、终止进程数、僵死进程数。Cpu(s): us 用户空间占用cpu百分比 sy 内核空间占用cpu百分比 ni 用户进程空间内改变过优先级的进程占用cpu百分比 id 空闲cpu百分比 wa 等待输入输出(I/O)的cpu百分比 hi cpu处理硬件中断的时间 si cpu处理软件中断的时间 st 用于有虚拟cpu的情况,表示被虚拟机偷掉的cpu时间 说明: us高的解决方法:CPU us 高的原因主要是执行的线程不需要任何挂起动作,且一直执行,导致CPU没有机会去调度执行其它的线程。 sy高的解决方法:CPU sy 高的原因主要是线程的运行状态要经常切换,对于这种情况,常见的一种优化方法是减少线程数。 补充: 1)查看每个CPU的性能数据:使用top的交互命令数字1 注:如果机器的cpu个数较多时,按1会提示"Sorry, terminal is not big enough",这时,我们可以使用mpstat命令来查看每个cpu的情况。 2)查看每个线程的性能信息:使用top的交互命令H 或 使用top -H 常见情况: 1>某个线程CPU利用率一直100%,则说明是这个线程有可能有死循环,将PID记录下来。 2>某个线程一直在TOP 10的位置,这说明这个线程可能有性能问题。 3>CPU利用率高的几个线程在不停变化,说明并不是由某一个线程导致CPU偏高。 Mem: total 总的物理内存 used 使用物理内存大小 free 空闲物理内存 buffers 用内核缓存的内存大小Swap: total 总的交换空间大小 used 已经使用交换空间大小 free 空间交换空间大小 cached 缓冲的交换空间大小 补充:buffers于cached区别:buffers指的是块设备的读写缓冲区,cached指的是文件系统本身的页面缓存。
2)每个进程的资源占用情况:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 43997 tomcat_a 20 0 50460 26m 1988 S 19.6 0.0 739:54.12 dataservice 20227 mysql 20 0 77.9g 54g 6248 S 3.3 43.5 99046:41 mysqld 52786 root 20 0 4318m 429m 736 S 1.7 0.3 13389:54 redis-server 44077 tomcat_a 20 0 26440 19m 1908 S 0.3 0.0 23:02.34 dataservice 77400 root 20 0 194m 3012 1020 S 0.3 0.0 275:09.63 snmpd 124158 tomcat_a 20 0 15560 1784 948 R 0.3 0.0 0:03.82 top 1 root 20 0 19356 540 316 S 0.0 0.0 0:02.66 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd PID 进程号USER 运行用户PR 优先级,说明:PR其实就是进程调度器分配给进程的时间片长度,单位是时钟个数,linux下一个时钟约为10ms,PR值为20则表示这个进程的时间片为200msNI 任务nice值VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESRES 物理内存用量SHR 共享内存用量S 进程的状态。 S 睡眠状态 D 不可中断的睡眠状态 R 运行状态 Z 僵死状态 T 停止或跟踪状态%CPU 从上一次刷新到现在,该进程占用cpu时间和总时间的百分比%MEM 占用的物理内存与总内存的百分比TIME+ 累计cpu占用时间COMMAND 该进程的命令名称
3)每个线程的资源占用情况:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND22855 tomcat_a 20 0 5650m 56m 2036 S 0.0 0.4 0:00.00 java22856 tomcat_a 20 0 5650m 56m 2036 S 0.0 0.4 0:01.79 java22857 tomcat_a 20 0 5650m 56m 2036 S 0.0 0.4 1:20.30 java