linux源码分析之proc文件系统
目录
一、proc文件系统
1、proc的内容
2、优缺点
二、特定进程的数据
三、一般性系统信息
四、网络信息
五、系统控制信息
一、proc文件系统
是一种虚拟文件系统,其信息不能从块设备读取,只有在读取文件内容时,才动态生成相应的信息。内核使用它向外界导出信息。
使用 proc 文件系统
- 可以获得有关内核各子系统的信息 如 内存利用率、附接的外设等
- 可以在不重新编译内核源代码的情况下修改内核的行为,或重启系统
- 文件系统装在在/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
4、查看进程状态status
(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(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 子目录提供了内核的各种网络选项的有关数据
- udp和tcp提供了IPv4的UDP和TCP套接字的统计数据
- 用于反向地址解析的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内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂