> 文档中心 > linux源码分析之proc文件系统

linux源码分析之proc文件系统

目录

一、proc文件系统

1、proc的内容

2、优缺点

二、特定进程的数据

三、一般性系统信息

四、网络信息

五、系统控制信息



一、proc文件系统

是一种虚拟文件系统,其信息不能从块设备读取,只有在读取文件内容时,才动态生成相应的信息。内核使用它向外界导出信息。

使用 proc 文件系统

  1. 可以获得有关内核各子系统的信息 如 内存利用率、附接的外设等
  2. 可以在不重新编译内核源代码的情况下修改内核的行为,或重启系统
  3. 文件系统装在在/proc, 只需要shell标准的cat,echo可以获取proc信息

1、proc的内容

  • 内存管理
  • 系统进程的特征数据
  • 文件系统
  • 设备驱动程序
  • 系统总线
  • 电源管理
  • 终端
  • 系统控制参数

2、优缺点

        优点:方便查看系统状态

        缺点:proc文件系统的信息过载问题,有时候会猛烈地爆发。

替代方案: 1) 结构化的方法,采用特定于问题的虚拟文件系统。 一个很好的例子就是USB文件系统,将与USB子系统有关的许多状态信息导出到用户空间,而没有给/proc增加新的负担。 2)Sysfs文件系统提供了一种层次化的视图,不仅包括设备树,还有重要的内核对象。proc可以查看系统数据类型,特定进程的数据, 一般性系统信息, 网络信息和系统控制信息。

二、特定进程的数据

  每个系统进程,无论当前状态如何,都有一个对应的子目录(与其PID同名),包含了该进程的有 关信息。 1、查看13079进程信息,里面很多文件通过文件名即可知道功能 

(base) root@ubuntu:/proc/13079# lsarch_status  clear_refscwd      gid_map    maps net oom_score_adj  rootsmaps  status  uid_mapattr  cmdline   environ  io  mem  ns  pagemap sched      smaps_rollup  syscall wchanautogroup    comm      exe      limits     mountinfo   numa_maps  patch_state    schedstat  stack  taskauxv  coredump_filter  fdloginuid   mounts      oom_adj    personality    sessionid  stat   timerscgroupcpuset    fdinfo   map_files  mountstats  oom_score  projid_map     setgroups  statm  timerslack_ns

2、查看进程cmdline

(base) root@ubuntu:/proc/13079# cat cmdline /usr/lib/openssh/sftp-server

3、查看进程version

(base) root@ubuntu:/proc/13079# cat environSSH_CONNECTION=192.168.0.108 52245 192.168.0.107 22LANG=en_US.UTF-8XDG_SESSION_ID=10USER=wyPWD=/home/wyHOME=/home/wySSH_CLIENT=192.168.0.108 52245 22MAIL=/var/mail/wySHELL=/bin/bashSHLVL=1LOGNAME=wyDBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/busXDG_RUNTIME_DIR=/run/user/1000PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin_=/usr/lib/openssh/sftp-server

4、查看进程状态status

(base) root@ubuntu:/proc/13079# cat statusName:sftp-serverUmask:0002State:S (sleeping)Tgid:13079Ngid:0Pid:13079PPid:13078TracerPid:0Uid:1000100010001000Gid:1000100010001000FDSize:64Groups:4 24 27 30 46 116 126 1000 NStgid:13079NSpid:13079NSpgid:13079NSsid:13079VmPeak:   13156 kBVmSize:   13064 kBVmLck:0 kB...SigQ:0/31513SigPnd:0000000000000000ShdPnd:0000000000000000SigBlk:0000000000000000SigIgn:0000000000000000SigCgt:0000000000000000CapInh:0000000000000000CapPrm:0000000000000000CapEff:0000000000000000CapBnd:0000003fffffffffCapAmb:0000000000000000NoNewPrivs:0Seccomp:0Speculation_Store_Bypass:thread vulnerableCpus_allowed:ffffffff,ffffffff,ffffffff,ffffffffCpus_allowed_list:0-127Mems_allowed:00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001Mems_allowed_list:0voluntary_ctxt_switches:32nonvoluntary_ctxt_switches:3

不仅提供了有关 UID/GID 及进程其他数值的信息,还包括内存分配、进程能力、各个信号掩码的 状态(待决、阻塞,等等) 5、查看进程调度信息sched

(base) root@ubuntu:/proc/13079# cat schedsftp-server (13079, #threads: 1)-------------------------------------------------------------------se.exec_start    :      17648570.034625se.vruntime      :      2.310622se.sum_exec_runtime     :      3.507972se.nr_migrations :      0nr_switches      :     35nr_voluntary_switches   :     32nr_involuntary_switches :      3se.load.weight   :1048576se.runnable_weight      :1048576se.avg.load_sum  :    552se.avg.runnable_load_sum:    552se.avg.util_sum  : 523996se.avg.load_avg  :     11se.avg.runnable_load_avg:     11se.avg.util_avg  :     10se.avg.last_update_time :17648570034176se.avg.util_est.ewma    :     10se.avg.util_est.enqueued:      0policy    :      0prio      :    120clock-delta      :     13mm->numa_scan_seq:      0numa_pages_migrated     :      0numa_preferred_nid      :     -1total_numa_faults:      0current_node=0, numa_group_id=0numa_faults node=0 task_private=0 task_shared=0 group_private=0 group_shared=0

可以看到有时间,权重,这正是在CFS调度的时候用到的,具体调度分析参考进程CFS调度分析

三、一般性系统信息

  • kallsyms是一个符号表,给出了所有全局内核变量和函 数在内存中的地址
  • kcore     是一个动态的内核文件,“包含”了运行中的内核的所有数据,即主内存的全部内容
  • interrupts保存了当前操作期间引发的中断的说明
  • cpuinfo  处理器信息,如类型、制造商、型号和性能
  • ioports  当前使用的I/O端口
  • kmsg  内核输出的消息
  • loadavg  系统的平均负载,前3个是过去1分钟,5分钟,15分钟的负载
  • meminfo  存储器使用信息,包括物理内存和swap
  • uptime  系统启动的时间长度和空闲的时间长度
  • version  内核版本
  • slabinfo  系统中slab缓存的分配信息
  • ...

四、网络信息

/proc/net 子目录提供了内核的各种网络选项的有关数据

  • udptcp提供了IPv4UDPTCP套接字的统计数据
  • 用于反向地址解析的ARP表,可以在arp文件中查看
  • dev保存了通过系统的网络接口传输的数据量的统计数据(包括环回接口)。该信息可用于检 查网络的传输质量

查看dev信息,有Receive和Transmit

(base) root@ubuntu:/proc/net# cat devInter-|   Receive      |  Transmit face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed ens33: 755825318  547689    0    0    0     0   0  0 15464964  183026    0    0    0     00   0    lo:  348467    3367    0    0    0     0   0  0   348467    3367    0    0    0     00   0

五、系统控制信息

(base) root@ubuntu:/proc/sys# ls -ltotal 0dr-xr-xr-x 1 root root 0 Mar 25 05:39 abidr-xr-xr-x 1 root root 0 Mar 25 05:39 debugdr-xr-xr-x 1 root root 0 Mar 20 02:18 devdr-xr-xr-x 1 root root 0 Mar 20 02:18 fsdr-xr-xr-x 1 root root 0 Mar 20 02:18 kerneldr-xr-xr-x 1 root root 0 Mar 20 02:18 netdr-xr-xr-x 1 root root 0 Mar 25 05:39 userdr-xr-xr-x 1 root root 0 Mar 20 02:18 vm

查看内存交换算法在换出页时的“积极”程度

(base) root@ubuntu:/proc/sys#  cat /proc/sys/vm/swappiness60

修改后再查看

(base) root@ubuntu:/proc/sys# echo "80" > /proc/sys/vm/swappiness(base) root@ubuntu:/proc/sys# cat /proc/sys/vm/swappiness80

 免费内核视频 Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂

 

 

 


松山湖人才网