linux内核线程分析报告

本文介绍了如何通过/proc目录下的文件如stat,smaps,maps,statm等来监控Linux进程的详细信息,包括进程状态、内存使用、线程数量、平均负载等,提供了理解系统性能的关键指标。
摘要由CSDN通过智能技术生成

进程层次

[root@109-com1 scripts]# ps -ef|grep udevd
root       431     1  0 Aug28 ?        00:00:00 /sbin/udevd -d
root      1199   431  0 Aug28 ?        00:00:00 /sbin/udevd -d
root     19382   431  0 Aug30 ?        00:00:00 /sbin/udevd -d
[root@109-com1 scripts]# ps -ef|grep 1161
root      1161     1  0 Aug28 ?        00:00:03 /usr/libexec/postfix/master
postfix   1176  1161  0 Aug28 ?        00:00:01 qmgr -l -t fifo -u
postfix  30258  1161  0 13:35 ?        00:00:00 pickup -l -t fifo -u

root      1383     1  0 Aug28 ?        00:00:02 /usr/sbin/sshd
root     29538  1383  0 Sep03 ?        00:00:01 sshd: root@pts/2
root     29540 29538  0 Sep03 pts/2    00:00:00 -bash
root      2088 29540  0 14:08 pts/2    00:00:00 ps -ef

rpcuser  29223     1  0 Sep03 ?        00:00:00 rpc.statd --no-notify
rpc      29426     1  0 Sep03 ?        00:00:00 rpcbind
rpcuser  29433     1  0 Sep03 ?        00:00:00 rpc.statd --no-notify
 

[root@221-comecs tmp]# pstree -p
        ├─safe_asterisk(3732)───asterisk(3735)─┬─{asterisk}(3737)
        │                                      ├─{asterisk}(3738)
        │                                      ├─{asterisk}(3739)
        │                                      ├─{asterisk}(3740)
        │                                      ├─{asterisk}(3741)
        │                                      ├─{asterisk}(3742)
        │                                      ├─{asterisk}(3743)
[root@221-comecs tmp]# ps -Lf 3735  进程共启动了n个线程
UID        PID  PPID   LWP  C NLWP STIME TTY      STAT   TIME CMD
root      3735  3732  3735  0   61 Oct09 ?        Sl     0:00 /usr/sbin/asterisk -f -vvvg -c
root      3735  3732  3737  0   61 Oct09 ?        Sl     0:00 /usr/sbin/asterisk -f -vvvg -c
root      3735  3732  3738  0   61 Oct09 ?        Sl     0:00 /usr/sbin/asterisk -f -vvvg -c
root      3735  3732  3739  0   61 Oct09 ?        Sl     0:08 /usr/sbin/asterisk -f -vvvg -c
 

/proc/stat    总
/proc/loadavg
/proc/sched_debug
/proc/schedstat 总

/proc/pid/schedstat 分
/proc/pid/sched
/proc/pid/stack
/proc/pid/stat    分
/proc/pid/statm
/proc/pid/status
/proc/pid/maps
/proc/pid/smaps

/proc/loadavg文件
[root@109-com1 6939]# cat ../loadavg
0.01 0.03 0.00 2/397 19934
[root@109-com1 6939]# grep run /proc/stat
procs_running 2

每个值的含义为:
参数 解释
lavg_1 (1.0) 1-分钟平均负载
lavg_5 (1.00) 5-分钟平均负载
lavg_15(0.93) 15-分钟平均负载
nr_running (2) 在采样时刻,运行队列的任务的数目,与/proc/stat的procs_running表示相同意思
nr_threads (19) 在采样时刻,系统中活跃的任务的个数(不包括运行已经结束的任务)
last_pid(301) 最大的pid值,包括轻量级进程,即线程。
假设当前有两个CPU,则每个CPU的当前任务数为4.61/2=2.31

/proc/pid/smaps文件
该文件反映了该进程的相应线性区域的大小
解释说明:
每行数据格式如下:
(内存区域)开始-结束 访问权限  偏移 主设备号:次设备号 i节点  文件。
be8f1000-be906000 rwxp be8f1000 00:00 0          [stack]
Size:相应虚拟地址空间的大小
RSS: 正在使用的物理内存的大小
Shared_Clean:  共享区域的未使用页数
Shared_Dirty:   共享区域已经使用的页数
Private_Clean:   私有区域未使用的页数
Private_Dirty:  私有区域已经使用的页数

/proc/pid/maps文件,上面的smaps的更为详细,maps为列表
该文件反映了进程占用的内存区域
每行数据格式如下:
(内存区域)开始-结束 访问权限  偏移 主设备号:次设备号 i节点  文件。
/proc/pid/statm包含了在此进程中所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。
top命令中看到的VIRT

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
21714 root      20   0 2332m 184m 6984 S 16.9 18.5   3596:10 asterisk
 6939 root      20   0 2826m  36m 5916 S  3.7  3.7 226:34.83 FLTService

在/proc/pid/statm中看到的

[root@109-com1 6939]# cat statm
723692 9315 1479 80 0 692850 0

每列含义解释:
2826m*1024/4=723692  top中的PID为6939的VIRT字段2826m
Size (pages)= 723692  任务虚拟地址空间的大小 VmSize/4
36m*1024/4=9315    top中的PID为6939的RES字段36m
Resident(pages)= 9315  应用程序正在使用的物理内存的大小 VmRSS/4
5916/4=1479      top中的PID为6939的SHR字段5916
Shared(pages)= 1479  共享页数

status文件中的VmExe:       320 kB行    320/4=80
Trs(pages)=   程序所拥有的可执行虚拟内存的大小 VmExe/4
status文件中的VmLib:     95976 kB行    有问题的
Lrs(pages)=   被映像到任务的虚拟内存空间的库的大小 VmLib/4

status文件中的下两行即2771312+88/4=692850
VmData:  2771312 kB
VmStk:        88 kB
Drs(pages)=   程序数据段和用户态的栈的大小 (VmData+VmStk)/4

dt(pages) 

此文件字段较多
/proc/pid/stat参数解释pid=1 进程(包括轻量级进程,即线程)号comm= linuxrc 应用程序或命令的名字task_state=S 任务的状态,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:deadppid=0 父进程IDpgid=0 线程组号sid=0 c该任务所在的会话组IDtty_nr=0(pts/3) 该任务的tty终端的设备号,INT(0/256)=主设备号,(0-主设备号)=次设备号tty_pgrp=-1 终端的进程组号,当前运行在该任务所在终端的前台任务(包括shell 应用程序)的PID。task->flags=8388864进程标志位,查看该任务的特性min_flt=50该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数cmin_flt=633 累计的该任务的所有的waited-for进程曾经发生的次缺页的次数目maj_flt=20该任务需要从硬盘拷数据而发生的缺页(主缺页)的次数cmaj_flt=4 累计的该任务的所有的waited-for进程曾经发生的主缺页的次数目utime=2 该任务在用户态运行的时间,单位为jiffiesstime=357 该任务在核心态运行的时间,单位为jiffiescutime=72 累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffiescstime=342 累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffiespriority=16 任务的动态优先级nice=0 任务的静态优先级num_threads=1 该任务所在的线程组里线程的个数it_real_value=0 由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位.start_time=22 该任务启动的时间,单位为jiffiesvsize=2252800(bytes) 该任务的虚拟地址空间大小rss=70(page) 该任务当前驻留物理地址空间的大小Number of pages the process has in real memory,minu 3 for administrative purpose.这些页可能用于代码,数据和栈。rlim=4294967295=0xFFFFFFFF(bytes) 该任务能驻留物理地址空间的最大值start_code=32768=0x8000  该任务在虚拟地址空间的代码段的起始地址(由连接器决定)end_code=1879936该任务在虚拟地址空间的代码段的结束地址start_stack=3199270704=0Xbeb0ff30该任务在虚拟地址空间的栈的开始地址kstkesp=3199269552  sp(32 位堆栈指针) 的当前值, 与在进程的内核堆栈页得到的一致.kstkeip=1113432 =0X10FD58 指向将要执行的指令的指针, PC(32 位指令指针)的当前值.pendingsig=0 待处理信号的位图,记录发送给进程的普通信号block_sig=0 阻塞信号的位图sigign=0 忽略的信号的位图sigcatch=674311被俘获的信号的位图wchan=3221479524  如果该进程是睡眠状态,该值给出调度的调用点nswap=0 被swapped的页数cnswap=0 所有子进程被swapped的页数的和exit_signal=0  该进程结束时,向父进程所发送的信号task_cpu(task)=0 运行在哪个CPU上task_rt_priority=0 实时进程的相对优先级别task_policy=0 进程的调度策略,0=非实时进程,1=FIFO实时进程;2=RR实时进程  
/proc/pid/status

Name 应用程序或命令的名字
State 任务的状态,运行/睡眠/僵死/
SleepAVG 任务的平均等待时间(以nanosecond为单位),交互式任务因为休眠次数多、时间长,它们的 sleep_avg 也会相应地更大一些,所以计算出来的优先级也会相应高一些。
Tgid=286 线程组号
Pid=286 任务ID
Ppid=243 父进程ID
TracerPid=0 接收跟踪该进程信息的进程的ID号
Uid Uid euid suid fsuid
Gid Gid egid sgid fsgid
FDSize=32 文件描述符的最大个数,最多能打开的文件句柄的个数file->fds
Groups:
VmPeak: 60184 kB /*进程地址空间的大小*/
VmHWM: 18020 kB /*文件内存映射和匿名内存映射的大小*/
VmSize(KB)=1499136 任务虚拟地址空间的大小 (total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页
VmLck(KB)=0 任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm)
VmRSS(KB)= 344 kB 应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)
VmData(KB)=20KB 程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据; (total_vm-shared_vm-stack_vm)
VmStk(KB)=84KB 任务在用户态的栈的大小 (stack_vm)
VmExe(KB)=4KB 程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code)
VmLib(KB)=1300KB 被映像到任务的虚拟内存空间的库的大小 (exec_lib)
VmPTE=6KB 该进程的所有页表的大小,单位:kb
Threads=1 共享使用该信号描述符的任务的个数,在POSIX多线程序应用程序中,线程组中的所有线程使用同一个信号描述符。
SigQ 待处理信号的个数
SigPnd 屏蔽位,存储了该线程的待处理信号
ShdPnd 屏蔽位,存储了该线程组的待处理信号
SigBlk 存放被阻塞的信号
SigIgn 存放被忽略的信号
SigCgt 存放被俘获到的信号
CapInh Inheritable,能被当前进程执行的程序的继承的能力
CapPrm Permitted,进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的,CapEff是CapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性
CapEff Effective,进程的有效能力

转自:https://www.cnblogs.com/createyuan/p/3728340.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值