linux实战:ps和top命令系统调优

女爷i 2021-06-24 15:56 565阅读 0赞

1、linux下查看sleep状态的进程:(ps -l)

  1. [root@ttAlgorithm-tomcat-online101-jylt ~]# ps -efl | head
  2. F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
  3. 4 S root 1 0 0 80 0 - 4839 poll_s Jan05 ? 00:00:06 /sbin/init
  4. 1 S root 2 0 0 80 0 - 0 kthrea Jan05 ? 00:00:00 [kthreadd]
  5. 1 S root 3 2 0 -40 - - 0 migrat Jan05 ? 00:00:43 [migration/0]
  6. 1 S root 4 2 0 80 0 - 0 ksofti Jan05 ? 00:02:24 [ksoftirqd/0]
  7. 1 S root 5 2 0 -40 - - 0 cpu_st Jan05 ? 00:00:00 [stopper/0]
  8. 5 S root 6 2 0 -40 - - 0 watchd Jan05 ? 00:00:13 [watchdog/0]
  9. 1 S root 7 2 0 -40 - - 0 migrat Jan05 ? 00:00:34 [migration/1]
  10. 1 S root 8 2 0 -40 - - 0 cpu_st Jan05 ? 00:00:00 [stopper/1]
  11. 1 S root 9 2 0 80 0 - 0 ksofti Jan05 ? 00:01:09 [ksoftirqd/1]

各个列含义:

F:代表这个进程旗标 (process flags),说明这个进程的权限,常见有:
若4 表示此进程的权限 root ;
若1 則表示此子进程仅能fork。

S:代表这个进程的状态 (STAT),主要的状态有:
R (Running):该进程正在运行;
S (Sleep):该进程正在睡眠,可被唤醒。
D :不可被唤醒
T :停止状态(stop);
Z (Zombie):僵尸进程。

UID/PID/PPID:代表『此进程被该 UID 所拥有/进程的 PID 号/此进程的父进程 PID 』

C:代表 CPU 使用率,单位为百分比;

PRI/NI:Priority/Nice 的缩写,代表此进程被 CPU 所执行的优先顺序,数值越小代表该进程越快被 CPU 执行。

ADDR/SZ/WCHAN:都与内存,ADDR 是 kernel function,指出该进程在内存的哪個部分,如果是个 running 进程,一般就会显示『 - 』 / SZ 代表此进程用掉多少内存 / WCHAN 表示目前进程是否工作,同样的, 若为 - 表示正在工作中。

TTY:登入者的终端机位置,若为远程登入则使用动态終端介面 (pts/n);

TIME:使用掉的 CPU 时间,注意,是实际花费掉的 CPU 运作的时间,而不是系統时间;

CMD:就是 command 的缩写,造成此进程的指令。

2、查看进程状态信息:

  1. # cat /proc/30276/status
  2. Name: java
  3. State: S (sleeping)
  4. Tgid: 30276
  5. Pid: 30276
  6. PPid: 1
  7. TracerPid: 0
  8. Uid: 0 0 0 0
  9. Gid: 0 0 0 0
  10. Utrace: 0
  11. FDSize: 512
  12. Groups: 0
  13. VmPeak: 26622128 kB
  14. VmSize: 26614976 kB
  15. VmLck: 0 kB
  16. VmHWM: 944056 kB
  17. VmRSS: 937028 kB
  18. VmData: 26457872 kB
  19. VmStk: 88 kB
  20. VmExe: 4 kB
  21. VmLib: 15796 kB
  22. VmPTE: 2748 kB
  23. VmSwap: 0 kB
  24. Threads: 155
  25. SigQ: 2/256717
  26. SigPnd: 0000000000000000
  27. ShdPnd: 0000000000000000
  28. SigBlk: 0000000000000000
  29. SigIgn: 0000000000000002
  30. SigCgt: 2000000181005ccd
  31. CapInh: 0000000000000000
  32. CapPrm: ffffffffffffffff
  33. CapEff: ffffffffffffffff
  34. CapBnd: ffffffffffffffff
  35. Cpus_allowed: ff
  36. Cpus_allowed_list: 0-7
  37. Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
  38. Mems_allowed_list: 0
  39. voluntary_ctxt_switches: 1
  40. nonvoluntary_ctxt_switches: 3

3、linux下统计线程数:

1)统计当前系统线程页:(ps -efL)

  1. # ps -efL | grep -v $$ | wc -l
  2. 650

注:其中$$ 表示脚本运行的当前进程ID号

2)Linux下查看某个进程的线程数量:

方法一:pstree -p 进程id | wc -l

  1. # pstree -p 30276
  2. java(30276)─┬─{java}(30277)
  3. ├─{java}(30278)
  4. ├─{java}(30279)
  5. ├─{java}(30280)
  6. ├─{java}(30281)
  7. ├─{java}(30282)
  8. ├─{java}(30283)
  9. ├─{java}(30284)
  10. ├─{java}(30285)
  11. ├─{java}(30286)
  12. ├─{java}(30287)
  13. ├─{java}(30288)
  14. ├─{java}(30289)
  15. ├─{java}(30290)
  16. ├─{java}(30291)

方法二:top -Hp 进程号

  1. Tasks: 155 total, 0 running, 155 sleeping, 0 stopped, 0 zombie
  2. Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
  3. Mem: 32880500k total, 17735632k used, 15144868k free, 308996k buffers
  4. Swap: 4194300k total, 0k used, 4194300k free, 14014444k cached
  5. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  6. 30364 root 20 0 25.4g 915m 11m S 0.3 2.8 1:54.37 java
  7. 30398 root 20 0 25.4g 915m 11m S 0.3 2.8 1:57.57 java
  8. 30399 root 20 0 25.4g 915m 11m S 0.3 2.8 0:06.34 java
  9. 30440 root 20 0 25.4g 915m 11m S 0.3 2.8 1:54.48 java
  10. 30455 root 20 0 25.4g 915m 11m S 0.3 2.8 0:07.52 java
  11. 30515 root 20 0 25.4g 915m 11m S 0.3 2.8 0:29.62 java
  12. 30723 root 20 0 25.4g 915m 11m S 0.3 2.8 0:29.63 java
  13. 32392 root 20 0 25.4g 915m 11m S 0.3 2.8 0:03.12 java
  14. 30276 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.00 java
  15. 30277 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.88 java
  16. 30278 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.30 java
  17. 30279 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.25 java
  18. 30280 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.23 java
  19. 30281 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.28 java
  20. 30282 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.25 java
  21. 30283 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.21 java
  22. 30284 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.27 java
  23. 30285 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.31 java
  24. 30286 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.00 java
  25. 30287 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.00 java
  26. 30288 root 20 0 25.4g 915m 11m S 0.0 2.8 0:01.33 java
  27. 30289 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.95 java
  28. 30290 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.07 java
  29. 30291 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.08 java
  30. 30292 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.00 java

参考:http://www.bubuko.com/infodetail-976020.html

4、top和ps命令各个列含义:

1)ps aux:

  1. # ps aux | head
  2. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  3. root 1 0.0 0.0 19356 1260 ? Ss Jan05 0:06 /sbin/init
  4. root 2 0.0 0.0 0 0 ? S Jan05 0:00 [kthreadd]
  5. root 3 0.0 0.0 0 0 ? S Jan05 0:44 [migration/0]
  6. root 4 0.0 0.0 0 0 ? S Jan05 2:24 [ksoftirqd/0]
  7. root 5 0.0 0.0 0 0 ? S Jan05 0:00 [stopper/0]
  8. root 6 0.0 0.0 0 0 ? S Jan05 0:13 [watchdog/0]
  9. root 7 0.0 0.0 0 0 ? S Jan05 0:34 [migration/1]
  10. root 8 0.0 0.0 0 0 ? S Jan05 0:00 [stopper/1]
  11. root 9 0.0 0.0 0 0 ? S Jan05 1:09 [ksoftirqd/1]

解释如下:
VSZ–进程的虚拟大小
RSS–驻留集的大小,可以理解为内存中页的数量
TTY–控制终端的ID
STAT–也就是当前进程的状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
STRAT–这个很简单,就是该进程启动的时间
TIME–进程已经消耗的CPU时间,注意是消耗CPU的时间
COMMOND–命令的名称和参数

应用:用ps大概统计下所有程序占用的总内存

  1. ps aux | awk '{mem += $6} END {print mem/1024/1024}'

2)top

  1. top - 12:35:14 up 136 days, 20:38, 1 user, load average: 0.00, 0.00, 0.00
  2. Tasks: 391 total, 1 running, 390 sleeping, 0 stopped, 0 zombie
  3. Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
  4. Mem: 32880500k total, 17735940k used, 15144560k free, 308996k buffers
  5. Swap: 4194300k total, 0k used, 4194300k free, 14022888k cached
  6. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  7. 30276 root 20 0 25.4g 913m 11m S 1.0 2.8 19:50.88 java
  8. 9419 root 20 0 15296 1500 952 R 0.3 0.0 0:00.05 top
  9. 15257 root 20 0 8419m 1.6g 27m S 0.3 5.1 352:21.36 java
  10. 1 root 20 0 19356 1260 940 S 0.0 0.0 0:06.37 init
  11. 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
  12. 3 root RT 0 0 0 0 S 0.0 0.0 0:44.00 migration/0
  13. 4 root 20 0 0 0 0 S 0.0 0.0 2:24.97 ksoftirqd/0

解释:

VIRT:virtual memory usage 虚拟内存,进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等.假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量。

RES:resident memory usage 常驻内存,进程当前使用的内存大小,包含其他进程的共享,但不包括swap out.如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反。

SHR:shared memory 共享内存

PR:优先级;

发表评论

表情:
评论列表 (有 0 条评论,565人围观)

还没有评论,来说两句吧...

相关阅读