【原创】如何查看某进程下运行的线程

研究 Atlas 过程中,需要了解其进程模型(线程模型),那么如何查看其运行模式呢? 

前提:Atlas 配置了 daemon 模式和 keepalive 功能。 

?


1

2

3

4

5

6

7

[root@Betty conf]# vi modb.cnf

 

[mysql-proxy]

...

daemon = true

keepalive = true

...

查看方式: 
1. ps 命令查看 
从 man ps 中可以如下说明,可以显示进程关系, 

?


1

2

3

To print a process tree:

   ps -ejH

   ps axjf

但 ps -ejH 显示出来的东东比较难看,所以采用第二种方式查看, 

?


1

2

3

[root@Betty conf]# ps axjf|grep mysql-proxy|grep -v grep

    1  3755  3754  3754 ?           -1 S        0   0:00 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

 3755  3756  3754  3754 ?           -1 Sl       0   0:00  \_ mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

那么如何显示线程关系呢?有如下说明, 

?


1

2

3

To get info about threads:

   ps -eLf

   ps axms

执行后输出(采用第一种方式查看,原因同上) 

?


1

2

3

4

5

6

7

8

9

[root@Betty conf]# ps -eLf|grep mysql-proxy

UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD

root      3755     1  3755  0    1 15:14 ?        00:00:00 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      3756  3755  3756  0    5 15:14 ?        00:00:00 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      3756  3755  3757  0    5 15:14 ?        00:00:00 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      3756  3755  3758  0    5 15:14 ?        00:00:00 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      3756  3755  3759  0    5 15:14 ?        00:00:00 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      3756  3755  3760  0    5 15:14 ?        00:00:00 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      4154 18711  4154  0    1 16:32 pts/5    00:00:00 grep mysql-proxy

其中 
LWP -- 轻量级进程,即线程,这里显示的是 thread id。 
NLWP -- 线程数,即 number of threads in process。 

如果还想要查看线程究竟运行在哪个 CPU 上,则执行如下命令, 

?


1

2

3

4

5

6

7

8

9

10

[root@Betty conf]# ps -eo ruser,pid,ppid,lwp,psr,args -L|grep mysql-proxy

RUSER      PID  PPID   LWP PSR COMMAND

root      3755     1  3755   2 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      3756  3755  3756   1 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      3756  3755  3757   0 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      3756  3755  3758   3 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      3756  3755  3759   1 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      3756  3755  3760   1 mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/modb.cnf

root      4162 18711  4162   2 grep mysql-proxy

[root@Betty conf]#

关键参数说明如下: 

?


1

2

3

4

5

6

7

8

To see every process with a user-defined format:

   ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

   ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

...

-L              Show threads, possibly with LWP and NLWP columns

...

psr        PSR      processor that process is currently assigned to.

...

2. pstree 命令查看 
查看 mysql-proxy 对应的进程 id 。 

?


1

2

3

[root@Betty conf]# ps -e |grep mysql-proxy

 3755 ?        00:00:00 mysql-proxy

 3756 ?        00:00:00 mysql-proxy

分别查看以上两个进程的树形关系。 

?


1

2

3

4

5

6

7

8

9

[root@Betty conf]# pstree 3755

mysql-proxy---mysql-proxy---4*[{mysql-proxy}]

 

[root@Betty conf]# pstree -p 3756

mysql-proxy(3756)-+-{mysql-proxy}(3757)

                  |-{mysql-proxy}(3758)

                  |-{mysql-proxy}(3759)

                  `-{mysql-proxy}(3760)

[root@Betty conf]#

3. top 命令查看 
查看 id 为 3756 的进程包含的线程。 

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

[root@Betty conf]# top -Hp 3756

top - 17:32:19 up  8:26,  6 users,  load average: 0.00, 0.00, 0.00

Tasks:   5 total,   0 running,   5 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.0%us,  0.0%sy,  0.1%ni, 99.7%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:   3941948k total,   897296k used,  3044652k free,   116232k buffers

Swap:  5996536k total,        0k used,  5996536k free,   516676k cached

 

 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                       

 3756 root      15   0  195m 3752 1804 S  0.0  0.1   0:00.00 mysql-proxy

 3757 root      15   0  195m 3752 1804 S  0.0  0.1   0:00.00 mysql-proxy

 3758 root      15   0  195m 3752 1804 S  0.0  0.1   0:00.00 mysql-proxy

 3759 root      15   0  195m 3752 1804 S  0.0  0.1   0:00.00 mysql-proxy

 3760 root      15   0  195m 3752 1804 S  0.0  0.1   0:00.00 mysql-proxy

按 f 后显示 

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

Current Fields:  AEHIOQTWKNMbcdfgjplrsuvyzX  for window 1:Def

Toggle fields via field letter, type any other key to return

 

* A: PID        = Process Id

* E: USER       = User Name

* H: PR         = Priority

* I: NI         = Nice value

* O: VIRT       = Virtual Image (kb)

* Q: RES        = Resident size (kb)

* T: SHR        = Shared Mem size (kb)

* W: S          = Process Status

* K: %CPU       = CPU usage

* N: %MEM       = Memory usage (RES)

* M: TIME+      = CPU Time, hundredths

  b: PPID       = Parent Process Pid

  c: RUSER      = Real user name

  d: UID        = User Id

  f: GROUP      = Group Name

  g: TTY        = Controlling Tty

  j: P          = Last used cpu (SMP)

  p: SWAP       = Swapped size (kb)

  l: TIME       = CPU Time

  r: CODE       = Code size (kb)

  s: DATA       = Data+Stack size (kb)

  u: nFLT       = Page Fault count

  v: nDRT       = Dirty Pages count

  y: WCHAN      = Sleeping in Function

  z: Flags      = Task Flags <sched.h>

* X: COMMAND    = Command name/line

 

Flags field:

  0x00000001  PF_ALIGNWARN

  0x00000002  PF_STARTING

  0x00000004  PF_EXITING

  0x00000040  PF_FORKNOEXEC

  0x00000100  PF_SUPERPRIV

  0x00000200  PF_DUMPCORE

  0x00000400  PF_SIGNALED

  0x00000800  PF_MEMALLOC

  0x00002000  PF_FREE_PAGES (2.5)

  0x00008000  debug flag (2.5)

  0x00024000  special threads (2.5)

  0x001D0000  special states (2.5)

  0x00100000  PF_USEDFPU (thru 2.4)

按 j 后变化的项为 

?


1

* J: P          = Last used cpu (SMP)

按回车或空格保存,退回到 top 界面,显示如下 

?


1

2

3

4

5

6

7

8

9

10

11

12

top - 17:34:07 up  8:27,  6 users,  load average: 0.00, 0.00, 0.00

Tasks:   5 total,   0 running,   5 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:   3941948k total,   897172k used,  3044776k free,   116264k buffers

Swap:  5996536k total,        0k used,  5996536k free,   516676k cached

 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  P COMMAND                                                                    

 3756 root      15   0  195m 3752 1804 S  0.0  0.1   0:00.00 1 mysql-proxy                                                                

 3757 root      15   0  195m 3752 1804 S  0.0  0.1   0:00.00 0 mysql-proxy                                                                

 3758 root      15   0  195m 3752 1804 S  0.0  0.1   0:00.00 1 mysql-proxy                                                                

 3759 root      15   0  195m 3752 1804 S  0.0  0.1   0:00.00 1 mysql-proxy                                                                

 3760 root      15   0  195m 3752 1804 S  0.0  0.1   0:00.00 1 mysql-proxy

在 top 的显示中会多出 P 这一列是最近一次运行该线程(进程)的CPU 。 

4. 到进程对应的目录下查看 

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

[root@Betty conf]# cat /proc/3756/status

Name:   mysql-proxy

State:  S (sleeping)

SleepAVG:       98%

Tgid:   3756

Pid:    3756

PPid:   3755

TracerPid:      0

Uid:    0       0       0       0

Gid:    0       0       0       0

FDSize: 64

Groups: 0 1 2 3 4 6 10

VmPeak:   252512 kB

VmSize:   200244 kB

VmLck:         0 kB

VmHWM:      3752 kB

VmRSS:      3752 kB

VmData:   118404 kB

VmStk:        88 kB

VmExe:        16 kB

VmLib:     10888 kB

VmPTE:       288 kB

StaBrk: 0df5c000 kB

Brk:    0e087000 kB

StaStk: 7fffb0fea000 kB

Threads:        5

SigQ:   1/38784

SigPnd: 0000000000000000

ShdPnd: 0000000000000000

SigBlk: 0000000000000000

SigIgn: 0000000000381000

SigCgt: 0000000180004a03

CapInh: 0000000000000000

CapPrm: 00000000fffffeff

CapEff: 00000000fffffeff

Cpus_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000ffff

Mems_allowed:   00000000,00000001

[root@Betty conf]#

其中 

?


1

Threads:        5

表示该进程下包含 5 个线程(3756 进程对应的线程 + 由其创建的工作线程)。

时间: 2025-01-01 11:02:21

【原创】如何查看某进程下运行的线程的相关文章

如何查看一个进程中的某个线程是否存活?

pthread_kill:   别被名字吓到,pthread_kill可不是kill,而是向线程发送signal.还记得signal吗,大部分signal的默认动作是终止进程的运行,所以,我们才要用signal()去抓信号并加上处理函数.       int pthread_kill(pthread_t thread, int sig);     向指定ID的线程发送sig信号,如果线程代码内不做处理,则按照信号默认的行为影响整个进程,也就是说,如果你给一个线程发送了SIGQUIT,但线程却没有

在Linux下如何查看一个进程的运行时间

我是一个 Linux 系统的新手.我该如何在我的 Ubuntu 服务器上查看一个进程(或者根据进程 id 查看)已经运行了多久? 你需要使用 ps 命令来查看关于一组正在运行的进程的信息.ps 命令提供了如下的两种格式化选项. etime 显示了自从该进程启动以来,经历过的时间,格式为 [[DD-]hh:]mm:ss. etimes 显示了自该进程启动以来,经历过的时间,以秒的形式. 如何查看一个进程已经运行的时间? 你需要在 ps 命令之后添加 -o etimes 或者 -o etime 参数

在 Linux 下如何查看一个进程的运行时间

我是一个 Linux 系统的新手.我该如何在我的 Ubuntu 服务器上查看一个进程(或者根据进程 id 查看)已经运行了多久? 你需要使用 ps 命令来查看关于一组正在运行的进程的信息.ps 命令提供了如下的两种格式化选项. etime 显示了自从该进程启动以来,经历过的时间,格式为 [[DD-]hh:]mm:ss. etimes 显示了自该进程启动以来,经历过的时间,以秒的形式. 如何查看一个进程已经运行的时间? 你需要在 ps 命令之后添加 -o etimes 或者 -o etime 参数

Linux有问必答:Linux上如何查看某个进程的线程

原创:LCTT https://linux.cn/article-5633-1.html 译者: GOLinux本文地址:https://linux.cn/article-5633-1.html2015-6-15 15:44 收藏: 9 问题: 我的程序在其内部创建并执行了多个线程,我怎样才能在该程序创建线程后监控其中单个线程?我想要看到带有它们名称的单个线程详细情况(如,CPU/内存使用率). 线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念.当一个程序内有多个线程被叉分出用以执

如何查看WinXP系统当前运行进程的PID?

  如何查看WinXP系统当前运行进程的PID? 同时按Ctrl+Alt+Del组合键打开Windows任务管理器或在任务栏空白处鼠标右键单击"任务管理器" 在弹出的Windows 任务管理器界面中切换到"进程"选项卡; 单击"查看"菜单中的"选择列" 打开选择列对话框,勾选"PID(进程标识符)",单击"确定"并关闭Windows 任务管理器窗口; 现在在"进程"选

linux服务器-Liunx下使用SSH查看was进程

问题描述 Liunx下使用SSH查看was进程 初次接触Linux,要监控was服务器的状态,用什么命令能查看was是不是挂了 而不用通过是否能登陆控制台来检测was是否还活着.

linux ps命令,查看某进程cpu和内存占用率情况, linux ps命令,查看进程cpu和内存占用率排序。 不指定

背景:有时需要单看某个进程的CPU及占用情况,有时需要看整体进程的一个占用情况.一. linux ps命令,查看某进程cpu和内存占用率情况[root@test vhost]# ps auxUSER       PID  %CPU    %MEM    VSZ   RSS TTY      STAT    START   TIME COMMAND解释:linux 下的ps命令USER 进程运行用户PID    进程编号%CPU 进程的cpu占用率%MEM 进程的内存占用率VSZ 进程所使用的虚存

用vbs确定脚本正在哪一个帐户下运行_vbs

问: 您好,脚本专家!如何确定脚本正在哪一个帐户下运行? -- KW 答: 您好,KW.您知道,自从我们以各种托辞而开设这一专栏以来已有一段时间了,对于我们而言,这并非易事:毕竟,寻找托辞是我们这些脚本专家的拿手好戏.明确了这一点,那就让我们以我们最喜欢的一个托辞开始吧:我们将向您介绍的脚本只在 Windows XP 和 Windows Server 2003 上有效.我们将向您介绍使得该脚本在 Windows 2000 上同样有效的方法,但后者绝对不及前者好. 噢,是的:现在感觉该方法不错.

AIX/LINUX系统中如何查看单个进程在os层面的内存消耗

--如何查看单个进程在os层面的内存消耗 AIX: $ svmon -Pt10 | perl -e 'while(<>){print if($.==2||$&&&!$s++);$.=0 if(/^-+$/)}' ---- -用这个可以看最大的占用内存的10个进程 ------------------------------------------------------------------------------- Pid Command Inuse Pin Pgs