proc文件系统介绍

来源:互联网 发布:yii2 cms 编辑:程序博客网 时间:2024/05/17 04:00

目录(?)[-]

  1. 目录
  2. 收集系统信息
    1. 1 进程子目录
    2. 2 内核数据
    3. 14 网络信息
  3. 2 每个进程信息
    1. 1 procpidoom_adj procpidoom_score_adj
    2. 2 procpidoom_score

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Table 1-4: Contents of the stat files (as of 2.6.30-rc7)  
  2. ..............................................................................  
  3.  Field          Content  
  4.   pid           process id  
  5.   tcomm         filename of the executable  
  6.   state         state (R is running, S is sleeping, D is sleeping in an  
  7.                 uninterruptible wait, Z is zombie, T is traced or stopped)  
  8.   ppid          process id of the parent process  
  9.   pgrp          pgrp of the process  
  10.   sid           session id  
  11.   tty_nr        tty the process uses  
  12.   tty_pgrp      pgrp of the tty  
  13.   flags         task flags  
  14.   min_flt       number of minor faults  
  15.   cmin_flt      number of minor faults with child's  
  16.   maj_flt       number of major faults  
  17.   cmaj_flt      number of major faults with child's  
  18.   utime         user mode jiffies  
  19.   stime         kernel mode jiffies  
  20.   cutime        user mode jiffies with child's  
  21.   cstime        kernel mode jiffies with child's  
  22.   priority      priority level  
  23.   nice          nice level  
  24.   num_threads   number of threads  
  25.   it_real_value (obsolete, always 0)  
  26.   start_time    time the process started after system boot  
  27.   vsize         virtual memory size  
  28.   rss           resident set memory size  
  29.   rsslim        current limit in bytes on the rss  
  30.   start_code    address above which program text can run  
  31.   end_code      address below which program text can run  
  32.   start_stack   address of the start of the main process stack  
  33.   esp           current value of ESP  
  34.   eip           current value of EIP  
  35.   pending       bitmap of pending signals  
  36.   blocked       bitmap of blocked signals  
  37.   sigign        bitmap of ignored signals  
  38.   sigcatch      bitmap of catched signals  
  39.   wchan         address where process went to sleep  
  40.   0             (place holder)  
  41.   0             (place holder)  
  42.   exit_signal   signal to send to parent thread on exit  
  43.   task_cpu      which CPU the task is scheduled on  
  44.   rt_priority   realtime priority  
  45.   policy        scheduling policy (man sched_setscheduler)  
  46.   blkio_ticks   time spent waiting for block IO  
  47.   gtime         guest time of the task in jiffies  
  48.   cgtime        guest time of the task children in jiffies  
  49.   start_data    address above which program data+bss is placed  
  50.   end_data      address below which program data+bss is placed  
  51.   start_brk     address above which program heap can be expanded with brk()  
  52.   arg_start     address above which program command line is placed  
  53.   arg_end       address below which program command line is placed  
  54.   env_start     address above which program environment is placed  
  55.   env_end       address below which program environment is placed  
  56.   exit_code     the thread's exit_code in the form reported by the waitpid system call  
  57. ..............................................................................  

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. ------------------------------------------------------------------------------  
  2.                        T H E  /proc   F I L E S Y S T E M  
  3. ------------------------------------------------------------------------------  
  4. /proc/sys         Terrehon Bowden <terrehon@pacbell.net>        October 7 1999  
  5.                   Bodo Bauer <bb@ricochet.net>  
  6.   
  7. 2.4.x update      Jorge Nerin <comandante@zaralinux.com>      November 14 2000  
  8. move /proc/sys    Shen Feng <shen@cn.fujitsu.com>       April 1 2009  
  9. ------------------------------------------------------------------------------  
  10. Version 1.3                                              Kernel version 2.2.12  
  11.                           Kernel version 2.4.0-test11-pre4  
  12. ------------------------------------------------------------------------------  
  13. fixes/update part 1.1  Stefani Seibold <stefani@seibold.net>       June 9 2009  
  14.   
  15. Table of Contents  
  16. -----------------  
  17.   
  18.   0     Preface  
  19.   0.1   Introduction/Credits  
  20.   0.2   Legal Stuff  
  21.   
  22.   1 Collecting System Information  
  23.   1.1   Process-Specific Subdirectories  
  24.   1.2   Kernel data  
  25.   1.3   IDE devices in /proc/ide  
  26.   1.4   Networking info in /proc/net  
  27.   1.5   SCSI info  
  28.   1.6   Parallel port info in /proc/parport  
  29.   1.7   TTY info in /proc/tty  
  30.   1.8   Miscellaneous kernel statistics in /proc/stat  
  31.   1.9 Ext4 file system parameters  
  32.   
  33.   2 Modifying System Parameters  
  34.   
  35.   3 Per-Process Parameters  
  36.   3.1   /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj - Adjust the oom-killer  
  37.                                 score  
  38.   3.2   /proc/<pid>/oom_score - Display current oom-killer score  
  39.   3.3   /proc/<pid>/io - Display the IO accounting fields  
  40.   3.4   /proc/<pid>/coredump_filter - Core dump filtering settings  
  41.   3.5   /proc/<pid>/mountinfo - Information about mounts  
  42.   3.6   /proc/<pid>/comm  & /proc/<pid>/task/<tid>/comm  
  43.   3.7   /proc/<pid>/task/<tid>/children - Information about task children  
  44.   3.8   /proc/<pid>/fdinfo/<fd> - Information about opened file  
  45.   
  46.   4 Configuring procfs  
  47.   4.1   Mount options  
  48.   
  49. ------------------------------------------------------------------------------  
  50. Preface  
  51. ------------------------------------------------------------------------------  
  52.   
  53. 0.1 Introduction/Credits  
  54. ------------------------  
  55.   
  56. This documentation is  part of a soon (or  so we hope) to be  released book on  
  57. the SuSE  Linux distribution. As  there is  no complete documentation  for the  
  58. /proc file system and we've used  many freely available sources to write these  
  59. chapters, it  seems only fair  to give the work  back to the  Linux community.  
  60. This work is  based on the 2.2.*  kernel version and the  upcoming 2.4.*. I'm  
  61. afraid it's still far from complete, but we  hope it will be useful. As far as  
  62. we know, it is the first 'all-in-one' document about the /proc file system. It  
  63. is focused  on the Intel  x86 hardware,  so if you  are looking for  PPC, ARM,  
  64. SPARC, AXP, etc., features, you probably  won't find what you are looking for.  
  65. It also only covers IPv4 networking, not IPv6 nor other protocols - sorry. But  
  66. additions and patches  are welcome and will  be added to this  document if you  
  67. mail them to Bodo.  
  68.   
  69. We'd like  to  thank Alan Cox, Rik van Riel, and Alexey Kuznetsov and a lot of  
  70. other people for help compiling this documentation. We'd also like to extend a  
  71. special thank  you to Andi Kleen for documentation, which we relied on heavily  
  72. to create  this  document,  as well as the additional information he provided.  
  73. Thanks to  everybody  else  who contributed source or docs to the Linux kernel  
  74. and helped create a great piece of software... :)  
  75.   
  76. If you  have  any comments, corrections or additions, please don't hesitate to  
  77. contact Bodo  Bauer  at  bb@ricochet.net.  We'll  be happy to add them to this  
  78. document.  
  79.   
  80. The   latest   version    of   this   document   is    available   online   at  
  81. http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html  
  82.   
  83. If  the above  direction does  not works  for you,  you could  try the  kernel  
  84. mailing  list  at  linux-kernel@vger.kernel.org  and/or try  to  reach  me  at  
  85. comandante@zaralinux.com.  
  86.   
  87. 0.2 Legal Stuff  
  88. ---------------  
  89.   
  90. We don't  guarantee  the  correctness  of this document, and if you come to us  
  91. complaining about  how  you  screwed  up  your  system  because  of  incorrect  
  92. documentation, we won't feel responsible...  
  93.   
  94. ------------------------------------------------------------------------------  
  95. CHAPTER 1: COLLECTING SYSTEM INFORMATION  
  96. ------------------------------------------------------------------------------  
  97.   
  98. ------------------------------------------------------------------------------  
  99. In This Chapter  
  100. ------------------------------------------------------------------------------  
  101. * Investigating  the  properties  of  the  pseudo  file  system  /proc and its  
  102.   ability to provide information on the running Linux system  
  103. * Examining /proc's structure  
  104. * Uncovering  various  information  about the kernel and the processes running  
  105.   on the system  
  106. ------------------------------------------------------------------------------  
  107.   
  108.   
  109. The proc  file  system acts as an interface to internal data structures in the  
  110. kernel. It  can  be  used to obtain information about the system and to change  
  111. certain kernel parameters at runtime (sysctl).  
  112.   
  113. First, we'll  take  a  look  at the read-only parts of /proc. In Chapter 2, we  
  114. show you how you can use /proc/sys to change settings.  
  115.   
  116. 1.1 Process-Specific Subdirectories  
  117. -----------------------------------  
  118.   
  119. The directory  /proc  contains  (among other things) one subdirectory for each  
  120. process running on the system, which is named after the process ID (PID).  
  121.   
  122. The link  self  points  to  the  process reading the file system. Each process  
  123. subdirectory has the entries listed in Table 1-1.  
  124.   
  125.   
  126. Table 1-1: Process specific entries in /proc  
  127. ..............................................................................  
  128.  File       Content  
  129.  clear_refs Clears page referenced bits shown in smaps output  
  130.  cmdline    Command line arguments  
  131.  cpu        Current and last cpu in which it was executed   (2.4)(smp)  
  132.  cwd        Link to the current working directory  
  133.  environ    Values of environment variables  
  134.  exe        Link to the executable of this process  
  135.  fd     Directory, which contains all file descriptors  
  136.  maps       Memory maps to executables and library files    (2.4)  
  137.  mem        Memory held by this process  
  138.  root       Link to the root directory of this process  
  139.  stat       Process status  
  140.  statm      Process memory status information  
  141.  status     Process status in human readable form  
  142.  wchan      If CONFIG_KALLSYMS is set, a pre-decoded wchan  
  143.  pagemap    Page table  
  144.  stack      Report full stack trace, enable via CONFIG_STACKTRACE  
  145.  smaps      a extension based on maps, showing the memory consumption of  
  146.         each mapping and flags associated with it  
  147. ..............................................................................  
  148.   
  149. For example, to get the status information of a process, all you have to do is  
  150. read the file /proc/PID/status:  
  151.   
  152.   >cat /proc/self/status  
  153.   Name:   cat  
  154.   State:  R (running)  
  155.   Tgid:   5452  
  156.   Pid:    5452  
  157.   PPid:   743  
  158.   TracerPid:      0                     (2.4)  
  159.   Uid:    501     501     501     501  
  160.   Gid:    100     100     100     100  
  161.   FDSize: 256  
  162.   Groups: 100 14 16  
  163.   VmPeak:     5004 kB  
  164.   VmSize:     5004 kB  
  165.   VmLck:         0 kB  
  166.   VmHWM:       476 kB  
  167.   VmRSS:       476 kB  
  168.   VmData:      156 kB  
  169.   VmStk:        88 kB  
  170.   VmExe:        68 kB  
  171.   VmLib:      1412 kB  
  172.   VmPTE:        20 kb  
  173.   VmSwap:        0 kB  
  174.   Threads:        1  
  175.   SigQ:   0/28578  
  176.   SigPnd: 0000000000000000  
  177.   ShdPnd: 0000000000000000  
  178.   SigBlk: 0000000000000000  
  179.   SigIgn: 0000000000000000  
  180.   SigCgt: 0000000000000000  
  181.   CapInh: 00000000fffffeff  
  182.   CapPrm: 0000000000000000  
  183.   CapEff: 0000000000000000  
  184.   CapBnd: ffffffffffffffff  
  185.   Seccomp:        0  
  186.   voluntary_ctxt_switches:        0  
  187.   nonvoluntary_ctxt_switches:     1  
  188.   
  189. This shows you nearly the same information you would get if you viewed it with  
  190. the ps  command.  In  fact,  ps  uses  the  proc  file  system  to  obtain its  
  191. information.  But you get a more detailed  view of the  process by reading the  
  192. file /proc/PID/status. It fields are described in table 1-2.  
  193.   
  194. The  statm  file  contains  more  detailed  information about the process  
  195. memory usage. Its seven fields are explained in Table 1-3.  The stat file  
  196. contains details information about the process itself.  Its fields are  
  197. explained in Table 1-4.  
  198.   
  199. (for SMP CONFIG users)  
  200. For making accounting scalable, RSS related information are handled in  
  201. asynchronous manner and the vaule may not be very precise. To see a precise  
  202. snapshot of a moment, you can see /proc/<pid>/smaps file and scan page table.  
  203. It's slow but very precise.  
  204.   
  205. Table 1-2: Contents of the status files (as of 2.6.30-rc7)  
  206. ..............................................................................  
  207.  Field                       Content  
  208.  Name                        filename of the executable  
  209.  State                       state (R is running, S is sleeping, D is sleeping  
  210.                              in an uninterruptible wait, Z is zombie,  
  211.                  T is traced or stopped)  
  212.  Tgid                        thread group ID  
  213.  Pid                         process id  
  214.  PPid                        process id of the parent process  
  215.  TracerPid                   PID of process tracing this process (0 if not)  
  216.  Uid                         Real, effective, saved set, and  file system UIDs  
  217.  Gid                         Real, effective, saved set, and  file system GIDs  
  218.  FDSize                      number of file descriptor slots currently allocated  
  219.  Groups                      supplementary group list  
  220.  VmPeak                      peak virtual memory size  
  221.  VmSize                      total program size  
  222.  VmLck                       locked memory size  
  223.  VmHWM                       peak resident set size ("high water mark")  
  224.  VmRSS                       size of memory portions  
  225.  VmData                      size of data, stack, and text segments  
  226.  VmStk                       size of data, stack, and text segments  
  227.  VmExe                       size of text segment  
  228.  VmLib                       size of shared library code  
  229.  VmPTE                       size of page table entries  
  230.  VmSwap                      size of swap usage (the number of referred swapents)  
  231.  Threads                     number of threads  
  232.  SigQ                        number of signals queued/max. number for queue  
  233.  SigPnd                      bitmap of pending signals for the thread  
  234.  ShdPnd                      bitmap of shared pending signals for the process  
  235.  SigBlk                      bitmap of blocked signals  
  236.  SigIgn                      bitmap of ignored signals  
  237.  SigCgt                      bitmap of catched signals  
  238.  CapInh                      bitmap of inheritable capabilities  
  239.  CapPrm                      bitmap of permitted capabilities  
  240.  CapEff                      bitmap of effective capabilities  
  241.  CapBnd                      bitmap of capabilities bounding set  
  242.  Seccomp                     seccomp mode, like prctl(PR_GET_SECCOMP, ...)  
  243.  Cpus_allowed                mask of CPUs on which this process may run  
  244.  Cpus_allowed_list           Same as previous, but in "list format"  
  245.  Mems_allowed                mask of memory nodes allowed to this process  
  246.  Mems_allowed_list           Same as previous, but in "list format"  
  247.  voluntary_ctxt_switches     number of voluntary context switches  
  248.  nonvoluntary_ctxt_switches  number of non voluntary context switches  
  249. ..............................................................................  
  250.   
  251. Table 1-3: Contents of the statm files (as of 2.6.8-rc3)  
  252. ..............................................................................  
  253.  Field    Content  
  254.  size     total program size (pages)        (same as VmSize in status)  
  255.  resident size of memory portions (pages)   (same as VmRSS in status)  
  256.  shared   number of pages that are shared   (i.e. backed by a file)  
  257.  trs      number of pages that are 'code'   (not including libs; broken,  
  258.                             includes data segment)  
  259.  lrs      number of pages of library        (always 0 on 2.6)  
  260.  drs      number of pages of data/stack     (including libs; broken,  
  261.                             includes library text)  
  262.  dt       number of dirty pages         (always 0 on 2.6)  
  263. ..............................................................................  
  264.   
  265.   
  266. Table 1-4: Contents of the stat files (as of 2.6.30-rc7)  
  267. ..............................................................................  
  268.  Field          Content  
  269.   pid           process id  
  270.   tcomm         filename of the executable  
  271.   state         state (R is running, S is sleeping, D is sleeping in an  
  272.                 uninterruptible wait, Z is zombie, T is traced or stopped)  
  273.   ppid          process id of the parent process  
  274.   pgrp          pgrp of the process  
  275.   sid           session id  
  276.   tty_nr        tty the process uses  
  277.   tty_pgrp      pgrp of the tty  
  278.   flags         task flags  
  279.   min_flt       number of minor faults  
  280.   cmin_flt      number of minor faults with child's  
  281.   maj_flt       number of major faults  
  282.   cmaj_flt      number of major faults with child's  
  283.   utime         user mode jiffies  
  284.   stime         kernel mode jiffies  
  285.   cutime        user mode jiffies with child's  
  286.   cstime        kernel mode jiffies with child's  
  287.   priority      priority level  
  288.   nice          nice level  
  289.   num_threads   number of threads  
  290.   it_real_value (obsolete, always 0)  
  291.   start_time    time the process started after system boot  
  292.   vsize         virtual memory size  
  293.   rss           resident set memory size  
  294.   rsslim        current limit in bytes on the rss  
  295.   start_code    address above which program text can run  
  296.   end_code      address below which program text can run  
  297.   start_stack   address of the start of the main process stack  
  298.   esp           current value of ESP  
  299.   eip           current value of EIP  
  300.   pending       bitmap of pending signals  
  301.   blocked       bitmap of blocked signals  
  302.   sigign        bitmap of ignored signals  
  303.   sigcatch      bitmap of catched signals  
  304.   wchan         address where process went to sleep  
  305.   0             (place holder)  
  306.   0             (place holder)  
  307.   exit_signal   signal to send to parent thread on exit  
  308.   task_cpu      which CPU the task is scheduled on  
  309.   rt_priority   realtime priority  
  310.   policy        scheduling policy (man sched_setscheduler)  
  311.   blkio_ticks   time spent waiting for block IO  
  312.   gtime         guest time of the task in jiffies  
  313.   cgtime        guest time of the task children in jiffies  
  314.   start_data    address above which program data+bss is placed  
  315.   end_data      address below which program data+bss is placed  
  316.   start_brk     address above which program heap can be expanded with brk()  
  317.   arg_start     address above which program command line is placed  
  318.   arg_end       address below which program command line is placed  
  319.   env_start     address above which program environment is placed  
  320.   env_end       address below which program environment is placed  
  321.   exit_code     the thread's exit_code in the form reported by the waitpid system call  
  322. ..............................................................................  
  323.   
  324. The /proc/PID/maps file containing the currently mapped memory regions and  
  325. their access permissions.  
  326.   
  327. The format is:  
  328.   
  329. address           perms offset  dev   inode      pathname  
  330.   
  331. 08048000-08049000 r-xp 00000000 03:00 8312       /opt/test  
  332. 08049000-0804a000 rw-p 00001000 03:00 8312       /opt/test  
  333. 0804a000-0806b000 rw-p 00000000 00:00 0          [heap]  
  334. a7cb1000-a7cb2000 ---p 00000000 00:00 0  
  335. a7cb2000-a7eb2000 rw-p 00000000 00:00 0  
  336. a7eb2000-a7eb3000 ---p 00000000 00:00 0  
  337. a7eb3000-a7ed5000 rw-p 00000000 00:00 0          [stack:1001]  
  338. a7ed5000-a8008000 r-xp 00000000 03:00 4222       /lib/libc.so.6  
  339. a8008000-a800a000 r--p 00133000 03:00 4222       /lib/libc.so.6  
  340. a800a000-a800b000 rw-p 00135000 03:00 4222       /lib/libc.so.6  
  341. a800b000-a800e000 rw-p 00000000 00:00 0  
  342. a800e000-a8022000 r-xp 00000000 03:00 14462      /lib/libpthread.so.0  
  343. a8022000-a8023000 r--p 00013000 03:00 14462      /lib/libpthread.so.0  
  344. a8023000-a8024000 rw-p 00014000 03:00 14462      /lib/libpthread.so.0  
  345. a8024000-a8027000 rw-p 00000000 00:00 0  
  346. a8027000-a8043000 r-xp 00000000 03:00 8317       /lib/ld-linux.so.2  
  347. a8043000-a8044000 r--p 0001b000 03:00 8317       /lib/ld-linux.so.2  
  348. a8044000-a8045000 rw-p 0001c000 03:00 8317       /lib/ld-linux.so.2  
  349. aff35000-aff4a000 rw-p 00000000 00:00 0          [stack]  
  350. ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]  
  351.   
  352. where "address" is the address space in the process that it occupies, "perms"  
  353. is a set of permissions:  
  354.   
  355.  r = read  
  356.  w = write  
  357.  x = execute  
  358.  s = shared  
  359.  p = private (copy on write)  
  360.   
  361. "offset" is the offset into the mapping, "dev" is the device (major:minor), and  
  362. "inode" is the inode  on that device.  0 indicates that  no inode is associated  
  363. with the memory region, as the case would be with BSS (uninitialized data).  
  364. The "pathname" shows the name associated file for this mapping.  If the mapping  
  365. is not associated with a file:  
  366.   
  367.  [heap]                   = the heap of the program  
  368.  [stack]                  = the stack of the main process  
  369.  [stack:1001]             = the stack of the thread with tid 1001  
  370.  [vdso]                   = the "virtual dynamic shared object",  
  371.                             the kernel system call handler  
  372.  [anon:<name>]            = an anonymous mapping that has been  
  373.                             named by userspace  
  374.   
  375.  or if empty, the mapping is anonymous.  
  376.   
  377. The /proc/PID/task/TID/maps is a view of the virtual memory from the viewpoint  
  378. of the individual tasks of a process. In this file you will see a mapping marked  
  379. as [stack] if that task sees it as a stack. This is a key difference from the  
  380. content of /proc/PID/maps, where you will see all mappings that are being used  
  381. as stack by all of those tasks. Hence, for the example above, the task-level  
  382. map, i.e. /proc/PID/task/TID/maps for thread 1001 will look like this:  
  383.   
  384. 08048000-08049000 r-xp 00000000 03:00 8312       /opt/test  
  385. 08049000-0804a000 rw-p 00001000 03:00 8312       /opt/test  
  386. 0804a000-0806b000 rw-p 00000000 00:00 0          [heap]  
  387. a7cb1000-a7cb2000 ---p 00000000 00:00 0  
  388. a7cb2000-a7eb2000 rw-p 00000000 00:00 0  
  389. a7eb2000-a7eb3000 ---p 00000000 00:00 0  
  390. a7eb3000-a7ed5000 rw-p 00000000 00:00 0          [stack]  
  391. a7ed5000-a8008000 r-xp 00000000 03:00 4222       /lib/libc.so.6  
  392. a8008000-a800a000 r--p 00133000 03:00 4222       /lib/libc.so.6  
  393. a800a000-a800b000 rw-p 00135000 03:00 4222       /lib/libc.so.6  
  394. a800b000-a800e000 rw-p 00000000 00:00 0  
  395. a800e000-a8022000 r-xp 00000000 03:00 14462      /lib/libpthread.so.0  
  396. a8022000-a8023000 r--p 00013000 03:00 14462      /lib/libpthread.so.0  
  397. a8023000-a8024000 rw-p 00014000 03:00 14462      /lib/libpthread.so.0  
  398. a8024000-a8027000 rw-p 00000000 00:00 0  
  399. a8027000-a8043000 r-xp 00000000 03:00 8317       /lib/ld-linux.so.2  
  400. a8043000-a8044000 r--p 0001b000 03:00 8317       /lib/ld-linux.so.2  
  401. a8044000-a8045000 rw-p 0001c000 03:00 8317       /lib/ld-linux.so.2  
  402. aff35000-aff4a000 rw-p 00000000 00:00 0  
  403. ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]  
  404.   
  405. The /proc/PID/smaps is an extension based on maps, showing the memory  
  406. consumption for each of the process's mappings. For each of mappings there  
  407. is a series of lines such as the following:  
  408.   
  409. 08048000-080bc000 r-xp 00000000 03:02 13130      /bin/bash  
  410. Size:               1084 kB  
  411. Rss:                 892 kB  
  412. Pss:                 374 kB  
  413. Shared_Clean:        892 kB  
  414. Shared_Dirty:          0 kB  
  415. Private_Clean:         0 kB  
  416. Private_Dirty:         0 kB  
  417. Referenced:          892 kB  
  418. Anonymous:             0 kB  
  419. Swap:                  0 kB  
  420. KernelPageSize:        4 kB  
  421. MMUPageSize:           4 kB  
  422. Locked:              374 kB  
  423. VmFlags: rd ex mr mw me de  
  424. Name:           name from userspace  
  425.   
  426. the first of these lines shows the same information as is displayed for the  
  427. mapping in /proc/PID/maps.  The remaining lines show the size of the mapping  
  428. (size), the amount of the mapping that is currently resident in RAM (RSS), the  
  429. process' proportional share of this mapping (PSS), the number of clean and  
  430. dirty private pages in the mapping.  Note that even a page which is part of a  
  431. MAP_SHARED mapping, but has only a single pte mapped, i.e.  is currently used  
  432. by only one process, is accounted as private and not as shared.  "Referenced"  
  433. indicates the amount of memory currently marked as referenced or accessed.  
  434. "Anonymous" shows the amount of memory that does not belong to any file.  Even  
  435. a mapping associated with a file may contain anonymous pages: when MAP_PRIVATE  
  436. and a page is modified, the file page is replaced by a private anonymous copy.  
  437. "Swap" shows how much would-be-anonymous memory is also used, but out on  
  438. swap.  
  439.   
  440. "VmFlags" field deserves a separate description. This member represents the kernel  
  441. flags associated with the particular virtual memory area in two letter encoded  
  442. manner. The codes are the following:  
  443.     rd  - readable  
  444.     wr  - writeable  
  445.     ex  - executable  
  446.     sh  - shared  
  447.     mr  - may read  
  448.     mw  - may write  
  449.     me  - may execute  
  450.     ms  - may share  
  451.     gd  - stack segment growns down  
  452.     pf  - pure PFN range  
  453.     dw  - disabled write to the mapped file  
  454.     lo  - pages are locked in memory  
  455.     io  - memory mapped I/O area  
  456.     sr  - sequential read advise provided  
  457.     rr  - random read advise provided  
  458.     dc  - do not copy area on fork  
  459.     de  - do not expand area on remapping  
  460.     ac  - area is accountable  
  461.     nr  - swap space is not reserved for the area  
  462.     ht  - area uses huge tlb pages  
  463.     nl  - non-linear mapping  
  464.     ar  - architecture specific flag  
  465.     dd  - do not include area into core dump  
  466.     mm  - mixed map area  
  467.     hg  - huge page advise flag  
  468.     nh  - no-huge page advise flag  
  469.     mg  - mergable advise flag  
  470.   
  471. Note that there is no guarantee that every flag and associated mnemonic will  
  472. be present in all further kernel releases. Things get changed, the flags may  
  473. be vanished or the reverse -- new added.  
  474.   
  475. The "Name" field will only be present on a mapping that has been named by  
  476. userspace, and will show the name passed in by userspace.  
  477.   
  478. This file is only present if the CONFIG_MMU kernel configuration option is  
  479. enabled.  
  480.   
  481. The /proc/PID/clear_refs is used to reset the PG_Referenced and ACCESSED/YOUNG  
  482. bits on both physical and virtual pages associated with a process.  
  483. To clear the bits for all the pages associated with the process  
  484.     > echo 1 > /proc/PID/clear_refs  
  485.   
  486. To clear the bits for the anonymous pages associated with the process  
  487.     > echo 2 > /proc/PID/clear_refs  
  488.   
  489. To clear the bits for the file mapped pages associated with the process  
  490.     > echo 3 > /proc/PID/clear_refs  
  491. Any other value written to /proc/PID/clear_refs will have no effect.  
  492.   
  493. To reset the peak resident set size ("high water mark") to the process's  
  494. current value:  
  495.     > echo 5 > /proc/PID/clear_refs  
  496.   
  497. The /proc/pid/pagemap gives the PFN, which can be used to find the pageflags  
  498. using /proc/kpageflags and number of times a page is mapped using  
  499. /proc/kpagecount. For detailed explanation, see Documentation/vm/pagemap.txt.  
  500.   
  501. 1.2 Kernel data  
  502. ---------------  
  503.   
  504. Similar to  the  process entries, the kernel data files give information about  
  505. the running kernel. The files used to obtain this information are contained in  
  506. /proc and  are  listed  in Table 1-5. Not all of these will be present in your  
  507. system. It  depends  on the kernel configuration and the loaded modules, which  
  508. files are there, and which are missing.  
  509.   
  510. Table 1-5: Kernel info in /proc  
  511. ..............................................................................  
  512.  File        Content                                             
  513.  apm         Advanced power management info                      
  514.  buddyinfo   Kernel memory allocator information (see text) (2.5)  
  515.  bus         Directory containing bus specific information       
  516.  cmdline     Kernel command line                                 
  517.  cpuinfo     Info about the CPU                                  
  518.  devices     Available devices (block and character)             
  519.  dma         Used DMS channels                                   
  520.  filesystems Supported filesystems                               
  521.  driver      Various drivers grouped here, currently rtc (2.4)  
  522.  execdomains Execdomains, related to security           (2.4)  
  523.  fb      Frame Buffer devices               (2.4)  
  524.  fs      File system parameters, currently nfs/exports  (2.4)  
  525.  ide         Directory containing info about the IDE subsystem   
  526.  interrupts  Interrupt usage                                     
  527.  iomem       Memory map                     (2.4)  
  528.  ioports     I/O port usage                                      
  529.  irq         Masks for irq to cpu affinity          (2.4)(smp?)  
  530.  isapnp      ISA PnP (Plug&Play) Info               (2.4)  
  531.  kcore       Kernel core image (can be ELF or A.OUT(deprecated in 2.4))     
  532.  kmsg        Kernel messages                                     
  533.  ksyms       Kernel symbol table                                 
  534.  loadavg     Load average of last 1, 5 & 15 minutes                  
  535.  locks       Kernel locks                                        
  536.  meminfo     Memory info                                         
  537.  misc        Miscellaneous                                       
  538.  modules     List of loaded modules                              
  539.  mounts      Mounted filesystems                                 
  540.  net         Networking info (see text)                          
  541.  pagetypeinfo Additional page allocator information (see text)  (2.5)  
  542.  partitions  Table of partitions known to the system             
  543.  pci         Deprecated info of PCI bus (new way -> /proc/bus/pci/,  
  544.              decoupled by lspci                 (2.4)  
  545.  rtc         Real time clock                                     
  546.  scsi        SCSI info (see text)                                
  547.  slabinfo    Slab pool info                                      
  548.  softirqs    softirq usage  
  549.  stat        Overall statistics                                  
  550.  swaps       Swap space utilization                              
  551.  sys         See chapter 2                                       
  552.  sysvipc     Info of SysVIPC Resources (msg, sem, shm)      (2.4)  
  553.  tty         Info of tty drivers  
  554.  uptime      System uptime                                       
  555.  version     Kernel version                                      
  556.  video       bttv info of video resources           (2.4)  
  557.  vmallocinfo Show vmalloced areas  
  558. ..............................................................................  
  559.   
  560. You can,  for  example,  check  which interrupts are currently in use and what  
  561. they are used for by looking in the file /proc/interrupts:  
  562.   
  563.   > cat /proc/interrupts   
  564.              CPU0          
  565.     0:    8728810          XT-PIC  timer   
  566.     1:        895          XT-PIC  keyboard   
  567.     2:          0          XT-PIC  cascade   
  568.     3:     531695          XT-PIC  aha152x   
  569.     4:    2014133          XT-PIC  serial   
  570.     5:      44401          XT-PIC  pcnet_cs   
  571.     8:          2          XT-PIC  rtc   
  572.    11:          8          XT-PIC  i82365   
  573.    12:     182918          XT-PIC  PS/2 Mouse   
  574.    13:          1          XT-PIC  fpu   
  575.    14:    1232265          XT-PIC  ide0   
  576.    15:          7          XT-PIC  ide1   
  577.   NMI:          0   
  578.   
  579. In 2.4.* a couple of lines where added to this file LOC & ERR (this time is the  
  580. output of a SMP machine):  
  581.   
  582.   > cat /proc/interrupts   
  583.   
  584.              CPU0       CPU1         
  585.     0:    1243498    1214548    IO-APIC-edge  timer  
  586.     1:       8949       8958    IO-APIC-edge  keyboard  
  587.     2:          0          0          XT-PIC  cascade  
  588.     5:      11286      10161    IO-APIC-edge  soundblaster  
  589.     8:          1          0    IO-APIC-edge  rtc  
  590.     9:      27422      27407    IO-APIC-edge  3c503  
  591.    12:     113645     113873    IO-APIC-edge  PS/2 Mouse  
  592.    13:          0          0          XT-PIC  fpu  
  593.    14:      22491      24012    IO-APIC-edge  ide0  
  594.    15:       2183       2415    IO-APIC-edge  ide1  
  595.    17:      30564      30414   IO-APIC-level  eth0  
  596.    18:        177        164   IO-APIC-level  bttv  
  597.   NMI:    2457961    2457959   
  598.   LOC:    2457882    2457881   
  599.   ERR:       2155  
  600.   
  601. NMI is incremented in this case because every timer interrupt generates a NMI  
  602. (Non Maskable Interrupt) which is used by the NMI Watchdog to detect lockups.  
  603.   
  604. LOC is the local interrupt counter of the internal APIC of every CPU.  
  605.   
  606. ERR is incremented in the case of errors in the IO-APIC bus (the bus that  
  607. connects the CPUs in a SMP system. This means that an error has been detected,  
  608. the IO-APIC automatically retry the transmission, so it should not be a big  
  609. problem, but you should read the SMP-FAQ.  
  610.   
  611. In 2.6.2* /proc/interrupts was expanded again.  This time the goal was for  
  612. /proc/interrupts to display every IRQ vector in use by the system, not  
  613. just those considered 'most important'.  The new vectors are:  
  614.   
  615.   THR -- interrupt raised when a machine check threshold counter  
  616.   (typically counting ECC corrected errors of memory or cache) exceeds  
  617.   a configurable threshold.  Only available on some systems.  
  618.   
  619.   TRM -- a thermal event interrupt occurs when a temperature threshold  
  620.   has been exceeded for the CPU.  This interrupt may also be generated  
  621.   when the temperature drops back to normal.  
  622.   
  623.   SPU -- a spurious interrupt is some interrupt that was raised then lowered  
  624.   by some IO device before it could be fully processed by the APIC.  Hence  
  625.   the APIC sees the interrupt but does not know what device it came from.  
  626.   For this case the APIC will generate the interrupt with a IRQ vector  
  627.   of 0xff. This might also be generated by chipset bugs.  
  628.   
  629.   RES, CAL, TLB -- rescheduling, call and TLB flush interrupts are  
  630.   sent from one CPU to another per the needs of the OS.  Typically,  
  631.   their statistics are used by kernel developers and interested users to  
  632.   determine the occurrence of interrupts of the given type.  
  633.   
  634. The above IRQ vectors are displayed only when relevant.  For example,  
  635. the threshold vector does not exist on x86_64 platforms.  Others are  
  636. suppressed when the system is a uniprocessor.  As of this writing, only  
  637. i386 and x86_64 platforms support the new IRQ vector displays.  
  638.   
  639. Of some interest is the introduction of the /proc/irq directory to 2.4.  
  640. It could be used to set IRQ to CPU affinity, this means that you can "hook" an  
  641. IRQ to only one CPU, or to exclude a CPU of handling IRQs. The contents of the  
  642. irq subdir is one subdir for each IRQ, and two files; default_smp_affinity and  
  643. prof_cpu_mask.  
  644.   
  645. For example   
  646.   > ls /proc/irq/  
  647.   0  10  12  14  16  18  2  4  6  8  prof_cpu_mask  
  648.   1  11  13  15  17  19  3  5  7  9  default_smp_affinity  
  649.   > ls /proc/irq/0/  
  650.   smp_affinity  
  651.   
  652. smp_affinity is a bitmask, in which you can specify which CPUs can handle the  
  653. IRQ, you can set it by doing:  
  654.   
  655.   > echo 1 > /proc/irq/10/smp_affinity  
  656.   
  657. This means that only the first CPU will handle the IRQ, but you can also echo  
  658. 5 which means that only the first and fourth CPU can handle the IRQ.  
  659.   
  660. The contents of each smp_affinity file is the same by default:  
  661.   
  662.   > cat /proc/irq/0/smp_affinity  
  663.   ffffffff  
  664.   
  665. There is an alternate interface, smp_affinity_list which allows specifying  
  666. a cpu range instead of a bitmask:  
  667.   
  668.   > cat /proc/irq/0/smp_affinity_list  
  669.   1024-1031  
  670.   
  671. The default_smp_affinity mask applies to all non-active IRQs, which are the  
  672. IRQs which have not yet been allocated/activated, and hence which lack a  
  673. /proc/irq/[0-9]* directory.  
  674.   
  675. The node file on an SMP system shows the node to which the device using the IRQ  
  676. reports itself as being attached. This hardware locality information does not  
  677. include information about any possible driver locality preference.  
  678.   
  679. prof_cpu_mask specifies which CPUs are to be profiled by the system wide  
  680. profiler. Default value is ffffffff (all cpus if there are only 32 of them).  
  681.   
  682. The way IRQs are routed is handled by the IO-APIC, and it's Round Robin  
  683. between all the CPUs which are allowed to handle it. As usual the kernel has  
  684. more info than you and does a better job than you, so the defaults are the  
  685. best choice for almost everyone.  [Note this applies only to those IO-APIC's  
  686. that support "Round Robin" interrupt distribution.]  
  687.   
  688. There are  three  more  important subdirectories in /proc: net, scsi, and sys.  
  689. The general  rule  is  that  the  contents,  or  even  the  existence of these  
  690. directories, depend  on your kernel configuration. If SCSI is not enabled, the  
  691. directory scsi  may  not  exist. The same is true with the net, which is there  
  692. only when networking support is present in the running kernel.  
  693.   
  694. The slabinfo  file  gives  information  about  memory usage at the slab level.  
  695. Linux uses  slab  pools for memory management above page level in version 2.2.  
  696. Commonly used  objects  have  their  own  slab  pool (such as network buffers,  
  697. directory cache, and so on).  
  698.   
  699. ..............................................................................  
  700.   
  701. > cat /proc/buddyinfo  
  702.   
  703. Node 0, zone      DMA      0      4      5      4      4      3 ...  
  704. Node 0, zone   Normal      1      0      0      1    101      8 ...  
  705. Node 0, zone  HighMem      2      0      0      1      1      0 ...  
  706.   
  707. External fragmentation is a problem under some workloads, and buddyinfo is a  
  708. useful tool for helping diagnose these problems.  Buddyinfo will give you a   
  709. clue as to how big an area you can safely allocate, or why a previous  
  710. allocation failed.  
  711.   
  712. Each column represents the number of pages of a certain order which are   
  713. available.  In this case, there are 0 chunks of 2^0*PAGE_SIZE available in   
  714. ZONE_DMA, 4 chunks of 2^1*PAGE_SIZE in ZONE_DMA, 101 chunks of 2^4*PAGE_SIZE   
  715. available in ZONE_NORMAL, etc...   
  716.   
  717. More information relevant to external fragmentation can be found in  
  718. pagetypeinfo.  
  719.   
  720. > cat /proc/pagetypeinfo  
  721. Page block order: 9  
  722. Pages per block:  512  
  723.   
  724. Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10  
  725. Node    0, zone      DMA, type    Unmovable      0      0      0      1      1      1      1      1      1      1      0  
  726. Node    0, zone      DMA, type  Reclaimable      0      0      0      0      0      0      0      0      0      0      0  
  727. Node    0, zone      DMA, type      Movable      1      1      2      1      2      1      1      0      1      0      2  
  728. Node    0, zone      DMA, type      Reserve      0      0      0      0      0      0      0      0      0      1      0  
  729. Node    0, zone      DMA, type      Isolate      0      0      0      0      0      0      0      0      0      0      0  
  730. Node    0, zone    DMA32, type    Unmovable    103     54     77      1      1      1     11      8      7      1      9  
  731. Node    0, zone    DMA32, type  Reclaimable      0      0      2      1      0      0      0      0      1      0      0  
  732. Node    0, zone    DMA32, type      Movable    169    152    113     91     77     54     39     13      6      1    452  
  733. Node    0, zone    DMA32, type      Reserve      1      2      2      2      2      0      1      1      1      1      0  
  734. Node    0, zone    DMA32, type      Isolate      0      0      0      0      0      0      0      0      0      0      0  
  735.   
  736. Number of blocks type     Unmovable  Reclaimable      Movable      Reserve      Isolate  
  737. Node 0, zone      DMA            2            0            5            1            0  
  738. Node 0, zone    DMA32           41            6          967            2            0  
  739.   
  740. Fragmentation avoidance in the kernel works by grouping pages of different  
  741. migrate types into the same contiguous regions of memory called page blocks.  
  742. A page block is typically the size of the default hugepage size e.g. 2MB on  
  743. X86-64. By keeping pages grouped based on their ability to move, the kernel  
  744. can reclaim pages within a page block to satisfy a high-order allocation.  
  745.   
  746. The pagetypinfo begins with information on the size of a page block. It  
  747. then gives the same type of information as buddyinfo except broken down  
  748. by migrate-type and finishes with details on how many page blocks of each  
  749. type exist.  
  750.   
  751. If min_free_kbytes has been tuned correctly (recommendations made by hugeadm  
  752. from libhugetlbfs http://sourceforge.net/projects/libhugetlbfs/), one can  
  753. make an estimate of the likely number of huge pages that can be allocated  
  754. at a given point in time. All the "Movable" blocks should be allocatable  
  755. unless memory has been mlock()'d. Some of the Reclaimable blocks should  
  756. also be allocatable although a lot of filesystem metadata may have to be  
  757. reclaimed to achieve this.  
  758.   
  759. ..............................................................................  
  760.   
  761. meminfo:  
  762.   
  763. Provides information about distribution and utilization of memory.  This  
  764. varies by architecture and compile options.  The following is from a  
  765. 16GB PIII, which has highmem enabled.  You may not have all of these fields.  
  766.   
  767. > cat /proc/meminfo  
  768.   
  769. The "Locked" indicates whether the mapping is locked in memory or not.  
  770.   
  771.   
  772. MemTotal:     16344972 kB  
  773. MemFree:      13634064 kB  
  774. Buffers:          3656 kB  
  775. Cached:        1195708 kB  
  776. SwapCached:          0 kB  
  777. Active:         891636 kB  
  778. Inactive:      1077224 kB  
  779. HighTotal:    15597528 kB  
  780. HighFree:     13629632 kB  
  781. LowTotal:       747444 kB  
  782. LowFree:          4432 kB  
  783. SwapTotal:           0 kB  
  784. SwapFree:            0 kB  
  785. Dirty:             968 kB  
  786. Writeback:           0 kB  
  787. AnonPages:      861800 kB  
  788. Mapped:         280372 kB  
  789. Slab:           284364 kB  
  790. SReclaimable:   159856 kB  
  791. SUnreclaim:     124508 kB  
  792. PageTables:      24448 kB  
  793. NFS_Unstable:        0 kB  
  794. Bounce:              0 kB  
  795. WritebackTmp:        0 kB  
  796. CommitLimit:   7669796 kB  
  797. Committed_AS:   100056 kB  
  798. VmallocTotal:   112216 kB  
  799. VmallocUsed:       428 kB  
  800. VmallocChunk:   111088 kB  
  801. AnonHugePages:   49152 kB  
  802.   
  803.     MemTotal: Total usable ram (i.e. physical ram minus a few reserved  
  804.               bits and the kernel binary code)  
  805.      MemFree: The sum of LowFree+HighFree  
  806.      Buffers: Relatively temporary storage for raw disk blocks  
  807.               shouldn't get tremendously large (20MB or so)  
  808.       Cached: in-memory cache for files read from the disk (the  
  809.               pagecache).  Doesn't include SwapCached  
  810.   SwapCached: Memory that once was swapped out, is swapped back in but  
  811.               still also is in the swapfile (if memory is needed it  
  812.               doesn't need to be swapped out AGAIN because it is already  
  813.               in the swapfile. This saves I/O)  
  814.       Active: Memory that has been used more recently and usually not  
  815.               reclaimed unless absolutely necessary.  
  816.     Inactive: Memory which has been less recently used.  It is more  
  817.               eligible to be reclaimed for other purposes  
  818.    HighTotal:  
  819.     HighFree: Highmem is all memory above ~860MB of physical memory  
  820.               Highmem areas are for use by userspace programs, or  
  821.               for the pagecache.  The kernel must use tricks to access  
  822.               this memory, making it slower to access than lowmem.  
  823.     LowTotal:  
  824.      LowFree: Lowmem is memory which can be used for everything that  
  825.               highmem can be used for, but it is also available for the  
  826.               kernel's use for its own data structures.  Among many  
  827.               other things, it is where everything from the Slab is  
  828.               allocated.  Bad things happen when you're out of lowmem.  
  829.    SwapTotal: total amount of swap space available  
  830.     SwapFree: Memory which has been evicted from RAM, and is temporarily  
  831.               on the disk  
  832.        Dirty: Memory which is waiting to get written back to the disk  
  833.    Writeback: Memory which is actively being written back to the disk  
  834.    AnonPages: Non-file backed pages mapped into userspace page tables  
  835. AnonHugePages: Non-file backed huge pages mapped into userspace page tables  
  836.       Mapped: files which have been mmaped, such as libraries  
  837.         Slab: in-kernel data structures cache  
  838. SReclaimable: Part of Slab, that might be reclaimed, such as caches  
  839.   SUnreclaim: Part of Slab, that cannot be reclaimed on memory pressure  
  840.   PageTables: amount of memory dedicated to the lowest level of page  
  841.               tables.  
  842. NFS_Unstable: NFS pages sent to the server, but not yet committed to stable  
  843.           storage  
  844.       Bounce: Memory used for block device "bounce buffers"  
  845. WritebackTmp: Memory used by FUSE for temporary writeback buffers  
  846.  CommitLimit: Based on the overcommit ratio ('vm.overcommit_ratio'),  
  847.               this is the total amount of  memory currently available to  
  848.               be allocated on the system. This limit is only adhered to  
  849.               if strict overcommit accounting is enabled (mode 2 in  
  850.               'vm.overcommit_memory').  
  851.               The CommitLimit is calculated with the following formula:  
  852.               CommitLimit = ('vm.overcommit_ratio' * Physical RAM) + Swap  
  853.               For example, on a system with 1G of physical RAM and 7G  
  854.               of swap with a `vm.overcommit_ratio` of 30 it would  
  855.               yield a CommitLimit of 7.3G.  
  856.               For more details, see the memory overcommit documentation  
  857.               in vm/overcommit-accounting.  
  858. Committed_AS: The amount of memory presently allocated on the system.  
  859.               The committed memory is a sum of all of the memory which  
  860.               has been allocated by processes, even if it has not been  
  861.               "used" by them as of yet. A process which malloc()'s 1G  
  862.               of memory, but only touches 300M of it will only show up  
  863.               as using 300M of memory even if it has the address space  
  864.               allocated for the entire 1G. This 1G is memory which has  
  865.               been "committed" to by the VM and can be used at any time  
  866.               by the allocating application. With strict overcommit  
  867.               enabled on the system (mode 2 in 'vm.overcommit_memory'),  
  868.               allocations which would exceed the CommitLimit (detailed  
  869.               above) will not be permitted. This is useful if one needs  
  870.               to guarantee that processes will not fail due to lack of  
  871.               memory once that memory has been successfully allocated.  
  872. VmallocTotal: total size of vmalloc memory area  
  873.  VmallocUsed: amount of vmalloc area which is used  
  874. VmallocChunk: largest contiguous block of vmalloc area which is free  
  875.   
  876. ..............................................................................  
  877.   
  878. vmallocinfo:  
  879.   
  880. Provides information about vmalloced/vmaped areas. One line per area,  
  881. containing the virtual address range of the area, size in bytes,  
  882. caller information of the creator, and optional information depending  
  883. on the kind of area :  
  884.   
  885.  pages=nr    number of pages  
  886.  phys=addr   if a physical address was specified  
  887.  ioremap     I/O mapping (ioremap() and friends)  
  888.  vmalloc     vmalloc() area  
  889.  vmap        vmap()ed pages  
  890.  user        VM_USERMAP area  
  891.  vpages      buffer for pages pointers was vmalloced (huge area)  
  892.  N<node>=nr  (Only on NUMA kernels)  
  893.              Number of pages allocated on memory node <node>  
  894.   
  895. > cat /proc/vmallocinfo  
  896. 0xffffc20000000000-0xffffc20000201000 2101248 alloc_large_system_hash+0x204 ...  
  897.   /0x2c0 pages=512 vmalloc N0=128 N1=128 N2=128 N3=128  
  898. 0xffffc20000201000-0xffffc20000302000 1052672 alloc_large_system_hash+0x204 ...  
  899.   /0x2c0 pages=256 vmalloc N0=64 N1=64 N2=64 N3=64  
  900. 0xffffc20000302000-0xffffc20000304000    8192 acpi_tb_verify_table+0x21/0x4f...  
  901.   phys=7fee8000 ioremap  
  902. 0xffffc20000304000-0xffffc20000307000   12288 acpi_tb_verify_table+0x21/0x4f...  
  903.   phys=7fee7000 ioremap  
  904. 0xffffc2000031d000-0xffffc2000031f000    8192 init_vdso_vars+0x112/0x210  
  905. 0xffffc2000031f000-0xffffc2000032b000   49152 cramfs_uncompress_init+0x2e ...  
  906.   /0x80 pages=11 vmalloc N0=3 N1=3 N2=2 N3=3  
  907. 0xffffc2000033a000-0xffffc2000033d000   12288 sys_swapon+0x640/0xac0      ...  
  908.   pages=2 vmalloc N1=2  
  909. 0xffffc20000347000-0xffffc2000034c000   20480 xt_alloc_table_info+0xfe ...  
  910.   /0x130 [x_tables] pages=4 vmalloc N0=4  
  911. 0xffffffffa0000000-0xffffffffa000f000   61440 sys_init_module+0xc27/0x1d00 ...  
  912.    pages=14 vmalloc N2=14  
  913. 0xffffffffa000f000-0xffffffffa0014000   20480 sys_init_module+0xc27/0x1d00 ...  
  914.    pages=4 vmalloc N1=4  
  915. 0xffffffffa0014000-0xffffffffa0017000   12288 sys_init_module+0xc27/0x1d00 ...  
  916.    pages=2 vmalloc N1=2  
  917. 0xffffffffa0017000-0xffffffffa0022000   45056 sys_init_module+0xc27/0x1d00 ...  
  918.    pages=10 vmalloc N0=10  
  919.   
  920. ..............................................................................  
  921.   
  922. softirqs:  
  923.   
  924. Provides counts of softirq handlers serviced since boot time, for each cpu.  
  925.   
  926. > cat /proc/softirqs  
  927.                 CPU0       CPU1       CPU2       CPU3  
  928.       HI:          0          0          0          0  
  929.    TIMER:      27166      27120      27097      27034  
  930.   NET_TX:          0          0          0         17  
  931.   NET_RX:         42          0          0         39  
  932.    BLOCK:          0          0        107       1121  
  933.  TASKLET:          0          0          0        290  
  934.    SCHED:      27035      26983      26971      26746  
  935.  HRTIMER:          0          0          0          0  
  936.      RCU:       1678       1769       2178       2250  
  937.   
  938.   
  939. 1.3 IDE devices in /proc/ide  
  940. ----------------------------  
  941.   
  942. The subdirectory /proc/ide contains information about all IDE devices of which  
  943. the kernel  is  aware.  There is one subdirectory for each IDE controller, the  
  944. file drivers  and a link for each IDE device, pointing to the device directory  
  945. in the controller specific subtree.  
  946.   
  947. The file  drivers  contains general information about the drivers used for the  
  948. IDE devices:  
  949.   
  950.   > cat /proc/ide/drivers  
  951.   ide-cdrom version 4.53  
  952.   ide-disk version 1.08  
  953.   
  954. More detailed  information  can  be  found  in  the  controller  specific  
  955. subdirectories. These  are  named  ide0,  ide1  and  so  on.  Each  of  these  
  956. directories contains the files shown in table 1-6.  
  957.   
  958.   
  959. Table 1-6: IDE controller info in  /proc/ide/ide?  
  960. ..............................................................................  
  961.  File    Content                                   
  962.  channel IDE channel (0 or 1)                      
  963.  config  Configuration (only for PCI/IDE bridge)   
  964.  mate    Mate name                                 
  965.  model   Type/Chipset of IDE controller            
  966. ..............................................................................  
  967.   
  968. Each device  connected  to  a  controller  has  a separate subdirectory in the  
  969. controllers directory.  The  files  listed in table 1-7 are contained in these  
  970. directories.  
  971.   
  972.   
  973. Table 1-7: IDE device information  
  974. ..............................................................................  
  975.  File             Content                                      
  976.  cache            The cache                                    
  977.  capacity         Capacity of the medium (in 512Byte blocks)   
  978.  driver           driver and version                           
  979.  geometry         physical and logical geometry                
  980.  identify         device identify block                        
  981.  media            media type                                   
  982.  model            device identifier                            
  983.  settings         device setup                                 
  984.  smart_thresholds IDE disk management thresholds               
  985.  smart_values     IDE disk management values                   
  986. ..............................................................................  
  987.   
  988. The most  interesting  file is settings. This file contains a nice overview of  
  989. the drive parameters:  
  990.   
  991.   # cat /proc/ide/ide0/hda/settings   
  992.   name                    value           min             max             mode   
  993.   ----                    -----           ---             ---             ----   
  994.   bios_cyl                526             0               65535           rw   
  995.   bios_head               255             0               255             rw   
  996.   bios_sect               63              0               63              rw   
  997.   breada_readahead        4               0               127             rw   
  998.   bswap                   0               0               1               r   
  999.   file_readahead          72              0               2097151         rw   
  1000.   io_32bit                0               0               3               rw   
  1001.   keepsettings            0               0               1               rw   
  1002.   max_kb_per_request      122             1               127             rw   
  1003.   multcount               0               0               8               rw   
  1004.   nice1                   1               0               1               rw   
  1005.   nowerr                  0               0               1               rw   
  1006.   pio_mode                write-only      0               255             w   
  1007.   slow                    0               0               1               rw   
  1008.   unmaskirq               0               0               1               rw   
  1009.   using_dma               0               0               1               rw   
  1010.   
  1011.   
  1012. 1.4 Networking info in /proc/net  
  1013. --------------------------------  
  1014.   
  1015. The subdirectory  /proc/net  follows  the  usual  pattern. Table 1-8 shows the  
  1016. additional values  you  get  for  IP  version 6 if you configure the kernel to  
  1017. support this. Table 1-9 lists the files and their meaning.  
  1018.   
  1019.   
  1020. Table 1-8: IPv6 info in /proc/net  
  1021. ..............................................................................  
  1022.  File       Content                                                 
  1023.  udp6       UDP sockets (IPv6)                                      
  1024.  tcp6       TCP sockets (IPv6)                                      
  1025.  raw6       Raw device statistics (IPv6)                            
  1026.  igmp6      IP multicast addresses, which this host joined (IPv6)   
  1027.  if_inet6   List of IPv6 interface addresses                        
  1028.  ipv6_route Kernel routing table for IPv6                           
  1029.  rt6_stats  Global IPv6 routing tables statistics                   
  1030.  sockstat6  Socket statistics (IPv6)                                
  1031.  snmp6      Snmp data (IPv6)                                        
  1032. ..............................................................................  
  1033.   
  1034.   
  1035. Table 1-9: Network info in /proc/net  
  1036. ..............................................................................  
  1037.  File          Content                                                           
  1038.  arp           Kernel  ARP table                                                 
  1039.  dev           network devices with statistics                                   
  1040.  dev_mcast     the Layer2 multicast groups a device is listening too  
  1041.                (interface index, label, number of references, number of bound  
  1042.                addresses).   
  1043.  dev_stat      network device status                                             
  1044.  ip_fwchains   Firewall chain linkage                                            
  1045.  ip_fwnames    Firewall chain names                                              
  1046.  ip_masq       Directory containing the masquerading tables                      
  1047.  ip_masquerade Major masquerading table                                          
  1048.  netstat       Network statistics                                                
  1049.  raw           raw device statistics                                             
  1050.  route         Kernel routing table                                              
  1051.  rpc           Directory containing rpc info                                     
  1052.  rt_cache      Routing cache                                                     
  1053.  snmp          SNMP data                                                         
  1054.  sockstat      Socket statistics                                                 
  1055.  tcp           TCP  sockets                                                      
  1056.  udp           UDP sockets                                                       
  1057.  unix          UNIX domain sockets                                               
  1058.  wireless      Wireless interface data (Wavelan etc)                             
  1059.  igmp          IP multicast addresses, which this host joined                    
  1060.  psched        Global packet scheduler parameters.                               
  1061.  netlink       List of PF_NETLINK sockets                                        
  1062.  ip_mr_vifs    List of multicast virtual interfaces                              
  1063.  ip_mr_cache   List of multicast routing cache                                   
  1064. ..............................................................................  
  1065.   
  1066. You can  use  this  information  to see which network devices are available in  
  1067. your system and how much traffic was routed over those devices:  
  1068.   
  1069.   > cat /proc/net/dev   
  1070.   Inter-|Receive                                                   |[...   
  1071.    face |bytes    packets errs drop fifo frame compressed multicast|[...   
  1072.       lo:  908188   5596     0    0    0     0          0         0 [...           
  1073.     ppp0:15475140  20721   410    0    0   410          0         0 [...    
  1074.     eth0:  614530   7085     0    0    0     0          0         1 [...   
  1075.      
  1076.   ...] Transmit   
  1077.   ...] bytes    packets errs drop fifo colls carrier compressed   
  1078.   ...]  908188     5596    0    0    0     0       0          0   
  1079.   ...] 1375103    17405    0    0    0     0       0          0   
  1080.   ...] 1703981     5535    0    0    0     3       0          0   
  1081.   
  1082. In addition, each Channel Bond interface has its own directory.  For  
  1083. example, the bond0 device will have a directory called /proc/net/bond0/.  
  1084. It will contain information that is specific to that bond, such as the  
  1085. current slaves of the bond, the link status of the slaves, and how  
  1086. many times the slaves link has failed.  
  1087.   
  1088. 1.5 SCSI info  
  1089. -------------  
  1090.   
  1091. If you  have  a  SCSI  host adapter in your system, you'll find a subdirectory  
  1092. named after  the driver for this adapter in /proc/scsi. You'll also see a list  
  1093. of all recognized SCSI devices in /proc/scsi:  
  1094.   
  1095.   >cat /proc/scsi/scsi   
  1096.   Attached devices:   
  1097.   Host: scsi0 Channel: 00 Id: 00 Lun: 00   
  1098.     Vendor: IBM      Model: DGHS09U          Rev: 03E0   
  1099.     Type:   Direct-Access                    ANSI SCSI revision: 03   
  1100.   Host: scsi0 Channel: 00 Id: 06 Lun: 00   
  1101.     Vendor: PIONEER  Model: CD-ROM DR-U06S   Rev: 1.04   
  1102.     Type:   CD-ROM                           ANSI SCSI revision: 02   
  1103.   
  1104.   
  1105. The directory  named  after  the driver has one file for each adapter found in  
  1106. the system.  These  files  contain information about the controller, including  
  1107. the used  IRQ  and  the  IO  address range. The amount of information shown is  
  1108. dependent on  the adapter you use. The example shows the output for an Adaptec  
  1109. AHA-2940 SCSI adapter:  
  1110.   
  1111.   > cat /proc/scsi/aic7xxx/0   
  1112.      
  1113.   Adaptec AIC7xxx driver version: 5.1.19/3.2.4   
  1114.   Compile Options:   
  1115.     TCQ Enabled By Default : Disabled   
  1116.     AIC7XXX_PROC_STATS     : Disabled   
  1117.     AIC7XXX_RESET_DELAY    : 5   
  1118.   Adapter Configuration:   
  1119.              SCSI Adapter: Adaptec AHA-294X Ultra SCSI host adapter   
  1120.                              Ultra Wide Controller   
  1121.       PCI MMAPed I/O Base: 0xeb001000   
  1122.    Adapter SEEPROM Config: SEEPROM found and used.   
  1123.         Adaptec SCSI BIOS: Enabled   
  1124.                       IRQ: 10   
  1125.                      SCBs: Active 0, Max Active 2,   
  1126.                            Allocated 15, HW 16, Page 255   
  1127.                Interrupts: 160328   
  1128.         BIOS Control Word: 0x18b6   
  1129.      Adapter Control Word: 0x005b   
  1130.      Extended Translation: Enabled   
  1131.   Disconnect Enable Flags: 0xffff   
  1132.        Ultra Enable Flags: 0x0001   
  1133.    Tag Queue Enable Flags: 0x0000   
  1134.   Ordered Queue Tag Flags: 0x0000   
  1135.   Default Tag Queue Depth: 8   
  1136.       Tagged Queue By Device array for aic7xxx host instance 0:   
  1137.         {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}   
  1138.       Actual queue depth per device for aic7xxx host instance 0:   
  1139.         {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}   
  1140.   Statistics:   
  1141.   (scsi0:0:0:0)   
  1142.     Device using Wide/Sync transfers at 40.0 MByte/sec, offset 8   
  1143.     Transinfo settings: current(12/8/1/0), goal(12/8/1/0), user(12/15/1/0)   
  1144.     Total transfers 160151 (74577 reads and 85574 writes)   
  1145.   (scsi0:0:6:0)   
  1146.     Device using Narrow/Sync transfers at 5.0 MByte/sec, offset 15   
  1147.     Transinfo settings: current(50/15/0/0), goal(50/15/0/0), user(50/15/0/0)   
  1148.     Total transfers 0 (0 reads and 0 writes)   
  1149.   
  1150.   
  1151. 1.6 Parallel port info in /proc/parport  
  1152. ---------------------------------------  
  1153.   
  1154. The directory  /proc/parport  contains information about the parallel ports of  
  1155. your system.  It  has  one  subdirectory  for  each port, named after the port  
  1156. number (0,1,2,...).  
  1157.   
  1158. These directories contain the four files shown in Table 1-10.  
  1159.   
  1160.   
  1161. Table 1-10: Files in /proc/parport  
  1162. ..............................................................................  
  1163.  File      Content                                                               
  1164.  autoprobe Any IEEE-1284 device ID information that has been acquired.           
  1165.  devices   list of the device drivers using that port. A + will appear by the  
  1166.            name of the device currently using the port (it might not appear  
  1167.            against any).   
  1168.  hardware  Parallel port's base address, IRQ line and DMA channel.               
  1169.  irq       IRQ that parport is using for that port. This is in a separate  
  1170.            file to allow you to alter it by writing a new value in (IRQ  
  1171.            number or none).   
  1172. ..............................................................................  
  1173.   
  1174. 1.7 TTY info in /proc/tty  
  1175. -------------------------  
  1176.   
  1177. Information about  the  available  and actually used tty's can be found in the  
  1178. directory /proc/tty.You'll  find  entries  for drivers and line disciplines in  
  1179. this directory, as shown in Table 1-11.  
  1180.   
  1181.   
  1182. Table 1-11: Files in /proc/tty  
  1183. ..............................................................................  
  1184.  File          Content                                          
  1185.  drivers       list of drivers and their usage                  
  1186.  ldiscs        registered line disciplines                      
  1187.  driver/serial usage statistic and status of single tty lines   
  1188. ..............................................................................  
  1189.   
  1190. To see  which  tty's  are  currently in use, you can simply look into the file  
  1191. /proc/tty/drivers:  
  1192.   
  1193.   > cat /proc/tty/drivers   
  1194.   pty_slave            /dev/pts      136   0-255 pty:slave   
  1195.   pty_master           /dev/ptm      128   0-255 pty:master   
  1196.   pty_slave            /dev/ttyp       3   0-255 pty:slave   
  1197.   pty_master           /dev/pty        2   0-255 pty:master   
  1198.   serial               /dev/cua        5   64-67 serial:callout   
  1199.   serial               /dev/ttyS       4   64-67 serial   
  1200.   /dev/tty0            /dev/tty0       4       0 system:vtmaster   
  1201.   /dev/ptmx            /dev/ptmx       5       2 system   
  1202.   /dev/console         /dev/console    5       1 system:console   
  1203.   /dev/tty             /dev/tty        5       0 system:/dev/tty   
  1204.   unknown              /dev/tty        4    1-63 console   
  1205.   
  1206.   
  1207. 1.8 Miscellaneous kernel statistics in /proc/stat  
  1208. -------------------------------------------------  
  1209.   
  1210. Various pieces   of  information about  kernel activity  are  available in the  
  1211. /proc/stat file.  All  of  the numbers reported  in  this file are  aggregates  
  1212. since the system first booted.  For a quick look, simply cat the file:  
  1213.   
  1214.   > cat /proc/stat  
  1215.   cpu  2255 34 2290 22625563 6290 127 456 0 0  
  1216.   cpu0 1132 34 1441 11311718 3675 127 438 0 0  
  1217.   cpu1 1123 0 849 11313845 2614 0 18 0 0  
  1218.   intr 114930548 113199788 3 0 5 263 0 4 [... lots more numbers ...]  
  1219.   ctxt 1990473  
  1220.   btime 1062191376  
  1221.   processes 2915  
  1222.   procs_running 1  
  1223.   procs_blocked 0  
  1224.   softirq 183433 0 21755 12 39 1137 231 21459 2263  
  1225.   
  1226. The very first  "cpu" line aggregates the  numbers in all  of the other "cpuN"  
  1227. lines.  These numbers identify the amount of time the CPU has spent performing  
  1228. different kinds of work.  Time units are in USER_HZ (typically hundredths of a  
  1229. second).  The meanings of the columns are as follows, from left to right:  
  1230.   
  1231. - user: normal processes executing in user mode  
  1232. - nice: niced processes executing in user mode  
  1233. - system: processes executing in kernel mode  
  1234. - idle: twiddling thumbs  
  1235. - iowait: waiting for I/O to complete  
  1236. - irq: servicing interrupts  
  1237. - softirq: servicing softirqs  
  1238. - steal: involuntary wait  
  1239. - guest: running a normal guest  
  1240. - guest_nice: running a niced guest  
  1241.   
  1242. The "intr" line gives counts of interrupts  serviced since boot time, for each  
  1243. of the  possible system interrupts.   The first  column  is the  total of  all  
  1244. interrupts serviced; each  subsequent column is the  total for that particular  
  1245. interrupt.  
  1246.   
  1247. The "ctxt" line gives the total number of context switches across all CPUs.  
  1248.   
  1249. The "btime" line gives  the time at which the  system booted, in seconds since  
  1250. the Unix epoch.  
  1251.   
  1252. The "processes" line gives the number  of processes and threads created, which  
  1253. includes (but  is not limited  to) those  created by  calls to the  fork() and  
  1254. clone() system calls.  
  1255.   
  1256. The "procs_running" line gives the total number of threads that are  
  1257. running or ready to run (i.e., the total number of runnable threads).  
  1258.   
  1259. The   "procs_blocked" line gives  the  number of  processes currently blocked,  
  1260. waiting for I/O to complete.  
  1261.   
  1262. The "softirq" line gives counts of softirqs serviced since boot time, for each  
  1263. of the possible system softirqs. The first column is the total of all  
  1264. softirqs serviced; each subsequent column is the total for that particular  
  1265. softirq.  
  1266.   
  1267.   
  1268. 1.9 Ext4 file system parameters  
  1269. ------------------------------  
  1270.   
  1271. Information about mounted ext4 file systems can be found in  
  1272. /proc/fs/ext4.  Each mounted filesystem will have a directory in  
  1273. /proc/fs/ext4 based on its device name (i.e., /proc/fs/ext4/hdc or  
  1274. /proc/fs/ext4/dm-0).   The files in each per-device directory are shown  
  1275. in Table 1-12, below.  
  1276.   
  1277. Table 1-12: Files in /proc/fs/ext4/<devname>  
  1278. ..............................................................................  
  1279.  File            Content                                          
  1280.  mb_groups       details of multiblock allocator buddy cache of free blocks  
  1281. ..............................................................................  
  1282.   
  1283. 2.0 /proc/consoles  
  1284. ------------------  
  1285. Shows registered system console lines.  
  1286.   
  1287. To see which character device lines are currently used for the system console  
  1288. /dev/console, you may simply look into the file /proc/consoles:  
  1289.   
  1290.   > cat /proc/consoles  
  1291.   tty0                 -WU (ECp)       4:7  
  1292.   ttyS0                -W- (Ep)        4:64  
  1293.   
  1294. The columns are:  
  1295.   
  1296.   device               name of the device  
  1297.   operations           R = can do read operations  
  1298.                        W = can do write operations  
  1299.                        U = can do unblank  
  1300.   flags                E = it is enabled  
  1301.                        C = it is preferred console  
  1302.                        B = it is primary boot console  
  1303.                        p = it is used for printk buffer  
  1304.                        b = it is not a TTY but a Braille device  
  1305.                        a = it is safe to use when cpu is offline  
  1306.   major:minor          major and minor number of the device separated by a colon  
  1307.   
  1308. ------------------------------------------------------------------------------  
  1309. Summary  
  1310. ------------------------------------------------------------------------------  
  1311. The /proc file system serves information about the running system. It not only  
  1312. allows access to process data but also allows you to request the kernel status  
  1313. by reading files in the hierarchy.  
  1314.   
  1315. The directory  structure  of /proc reflects the types of information and makes  
  1316. it easy, if not obvious, where to look for specific data.  
  1317. ------------------------------------------------------------------------------  
  1318.   
  1319. ------------------------------------------------------------------------------  
  1320. CHAPTER 2: MODIFYING SYSTEM PARAMETERS  
  1321. ------------------------------------------------------------------------------  
  1322.   
  1323. ------------------------------------------------------------------------------  
  1324. In This Chapter  
  1325. ------------------------------------------------------------------------------  
  1326. * Modifying kernel parameters by writing into files found in /proc/sys  
  1327. * Exploring the files which modify certain parameters  
  1328. * Review of the /proc/sys file tree  
  1329. ------------------------------------------------------------------------------  
  1330.   
  1331.   
  1332. A very  interesting part of /proc is the directory /proc/sys. This is not only  
  1333. a source  of  information,  it also allows you to change parameters within the  
  1334. kernel. Be  very  careful  when attempting this. You can optimize your system,  
  1335. but you  can  also  cause  it  to  crash.  Never  alter kernel parameters on a  
  1336. production system.  Set  up  a  development machine and test to make sure that  
  1337. everything works  the  way  you want it to. You may have no alternative but to  
  1338. reboot the machine once an error has been made.  
  1339.   
  1340. To change  a  value,  simply  echo  the new value into the file. An example is  
  1341. given below  in the section on the file system data. You need to be root to do  
  1342. this. You  can  create  your  own  boot script to perform this every time your  
  1343. system boots.  
  1344.   
  1345. The files  in /proc/sys can be used to fine tune and monitor miscellaneous and  
  1346. general things  in  the operation of the Linux kernel. Since some of the files  
  1347. can inadvertently  disrupt  your  system,  it  is  advisable  to  read  both  
  1348. documentation and  source  before actually making adjustments. In any case, be  
  1349. very careful  when  writing  to  any  of these files. The entries in /proc may  
  1350. change slightly between the 2.1.* and the 2.2 kernel, so if there is any doubt  
  1351. review the kernel documentation in the directory /usr/src/linux/Documentation.  
  1352. This chapter  is  heavily  based  on the documentation included in the pre 2.2  
  1353. kernels, and became part of it in version 2.2.1 of the Linux kernel.  
  1354.   
  1355. Please see: Documentation/sysctl/ directory for descriptions of these  
  1356. entries.  
  1357.   
  1358. ------------------------------------------------------------------------------  
  1359. Summary  
  1360. ------------------------------------------------------------------------------  
  1361. Certain aspects  of  kernel  behavior  can be modified at runtime, without the  
  1362. need to  recompile  the kernel, or even to reboot the system. The files in the  
  1363. /proc/sys tree  can  not only be read, but also modified. You can use the echo  
  1364. command to write value into these files, thereby changing the default settings  
  1365. of the kernel.  
  1366. ------------------------------------------------------------------------------  
  1367.   
  1368. ------------------------------------------------------------------------------  
  1369. CHAPTER 3: PER-PROCESS PARAMETERS  
  1370. ------------------------------------------------------------------------------  
  1371.   
  1372. 3.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj- Adjust the oom-killer score  
  1373. --------------------------------------------------------------------------------  
  1374.   
  1375. These file can be used to adjust the badness heuristic used to select which  
  1376. process gets killed in out of memory conditions.  
  1377.   
  1378. The badness heuristic assigns a value to each candidate task ranging from 0  
  1379. (never kill) to 1000 (always kill) to determine which process is targeted.  The  
  1380. units are roughly a proportion along that range of allowed memory the process  
  1381. may allocate from based on an estimation of its current memory and swap use.  
  1382. For example, if a task is using all allowed memory, its badness score will be  
  1383. 1000.  If it is using half of its allowed memory, its score will be 500.  
  1384.   
  1385. There is an additional factor included in the badness score: the current memory  
  1386. and swap usage is discounted by 3% for root processes.  
  1387.   
  1388. The amount of "allowed" memory depends on the context in which the oom killer  
  1389. was called.  If it is due to the memory assigned to the allocating task's cpuset  
  1390. being exhausted, the allowed memory represents the set of mems assigned to that  
  1391. cpuset.  If it is due to a mempolicy's node(s) being exhausted, the allowed  
  1392. memory represents the set of mempolicy nodes.  If it is due to a memory  
  1393. limit (or swap limit) being reached, the allowed memory is that configured  
  1394. limit.  Finally, if it is due to the entire system being out of memory, the  
  1395. allowed memory represents all allocatable resources.  
  1396.   
  1397. The value of /proc/<pid>/oom_score_adj is added to the badness score before it  
  1398. is used to determine which task to kill.  Acceptable values range from -1000  
  1399. (OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX).  This allows userspace to  
  1400. polarize the preference for oom killing either by always preferring a certain  
  1401. task or completely disabling it.  The lowest possible value, -1000, is  
  1402. equivalent to disabling oom killing entirely for that task since it will always  
  1403. report a badness score of 0.  
  1404.   
  1405. Consequently, it is very simple for userspace to define the amount of memory to  
  1406. consider for each task.  Setting a /proc/<pid>/oom_score_adj value of +500, for  
  1407. example, is roughly equivalent to allowing the remainder of tasks sharing the  
  1408. same system, cpuset, mempolicy, or memory controller resources to use at least  
  1409. 50% more memory.  A value of -500, on the other hand, would be roughly  
  1410. equivalent to discounting 50% of the task's allowed memory from being considered  
  1411. as scoring against the task.  
  1412.   
  1413. For backwards compatibility with previous kernels, /proc/<pid>/oom_adj may also  
  1414. be used to tune the badness score.  Its acceptable values range from -16  
  1415. (OOM_ADJUST_MIN) to +15 (OOM_ADJUST_MAX) and a special value of -17  
  1416. (OOM_DISABLE) to disable oom killing entirely for that task.  Its value is  
  1417. scaled linearly with /proc/<pid>/oom_score_adj.  
  1418.   
  1419. The value of /proc/<pid>/oom_score_adj may be reduced no lower than the last  
  1420. value set by a CAP_SYS_RESOURCE process. To reduce the value any lower  
  1421. requires CAP_SYS_RESOURCE.  
  1422.   
  1423. Caveat: when a parent task is selected, the oom killer will sacrifice any first  
  1424. generation children with separate address spaces instead, if possible.  This  
  1425. avoids servers and important system daemons from being killed and loses the  
  1426. minimal amount of work.  
  1427.   
  1428.   
  1429. 3.2 /proc/<pid>/oom_score - Display current oom-killer score  
  1430. -------------------------------------------------------------  
  1431.   
  1432. This file can be used to check the current score used by the oom-killer is for  
  1433. any given <pid>. Use it together with /proc/<pid>/oom_score_adj to tune which  
  1434. process should be killed in an out-of-memory situation.  
  1435.   
  1436.   
  1437. 3.3  /proc/<pid>/io - Display the IO accounting fields  
  1438. -------------------------------------------------------  
  1439.   
  1440. This file contains IO statistics for each running process  
  1441.   
  1442. Example  
  1443. -------  
  1444.   
  1445. test:/tmp # dd if=/dev/zero of=/tmp/test.dat &  
  1446. [1] 3828  
  1447.   
  1448. test:/tmp # cat /proc/3828/io  
  1449. rchar: 323934931  
  1450. wchar: 323929600  
  1451. syscr: 632687  
  1452. syscw: 632675  
  1453. read_bytes: 0  
  1454. write_bytes: 323932160  
  1455. cancelled_write_bytes: 0  
  1456.   
  1457.   
  1458. Description  
  1459. -----------  
  1460.   
  1461. rchar  
  1462. -----  
  1463.   
  1464. I/O counter: chars read  
  1465. The number of bytes which this task has caused to be read from storage. This  
  1466. is simply the sum of bytes which this process passed to read() and pread().  
  1467. It includes things like tty IO and it is unaffected by whether or not actual  
  1468. physical disk IO was required (the read might have been satisfied from  
  1469. pagecache)  
  1470.   
  1471.   
  1472. wchar  
  1473. -----  
  1474.   
  1475. I/O counter: chars written  
  1476. The number of bytes which this task has caused, or shall cause to be written  
  1477. to disk. Similar caveats apply here as with rchar.  
  1478.   
  1479.   
  1480. syscr  
  1481. -----  
  1482.   
  1483. I/O counter: read syscalls  
  1484. Attempt to count the number of read I/O operations, i.e. syscalls like read()  
  1485. and pread().  
  1486.   
  1487.   
  1488. syscw  
  1489. -----  
  1490.   
  1491. I/O counter: write syscalls  
  1492. Attempt to count the number of write I/O operations, i.e. syscalls like  
  1493. write() and pwrite().  
  1494.   
  1495.   
  1496. read_bytes  
  1497. ----------  
  1498.   
  1499. I/O counter: bytes read  
  1500. Attempt to count the number of bytes which this process really did cause to  
  1501. be fetched from the storage layer. Done at the submit_bio() level, so it is  
  1502. accurate for block-backed filesystems. <please add status regarding NFS and  
  1503. CIFS at a later time>  
  1504.   
  1505.   
  1506. write_bytes  
  1507. -----------  
  1508.   
  1509. I/O counter: bytes written  
  1510. Attempt to count the number of bytes which this process caused to be sent to  
  1511. the storage layer. This is done at page-dirtying time.  
  1512.   
  1513.   
  1514. cancelled_write_bytes  
  1515. ---------------------  
  1516.   
  1517. The big inaccuracy here is truncate. If a process writes 1MB to a file and  
  1518. then deletes the file, it will in fact perform no writeout. But it will have  
  1519. been accounted as having caused 1MB of write.  
  1520. In other words: The number of bytes which this process caused to not happen,  
  1521. by truncating pagecache. A task can cause "negative" IO too. If this task  
  1522. truncates some dirty pagecache, some IO which another task has been accounted  
  1523. for (in its write_bytes) will not be happening. We _could_ just subtract that  
  1524. from the truncating task's write_bytes, but there is information loss in doing  
  1525. that.  
  1526.   
  1527.   
  1528. Note  
  1529. ----  
  1530.   
  1531. At its current implementation state, this is a bit racy on 32-bit machines: if  
  1532. process A reads process B's /proc/pid/io while process B is updating one of  
  1533. those 64-bit counters, process A could see an intermediate result.  
  1534.   
  1535.   
  1536. More information about this can be found within the taskstats documentation in  
  1537. Documentation/accounting.  
  1538.   
  1539. 3.4 /proc/<pid>/coredump_filter - Core dump filtering settings  
  1540. ---------------------------------------------------------------  
  1541. When a process is dumped, all anonymous memory is written to a core file as  
  1542. long as the size of the core file isn't limited. But sometimes we don't want  
  1543. to dump some memory segments, for example, huge shared memory. Conversely,  
  1544. sometimes we want to save file-backed memory segments into a core file, not  
  1545. only the individual files.  
  1546.   
  1547. /proc/<pid>/coredump_filter allows you to customize which memory segments  
  1548. will be dumped when the <pid> process is dumped. coredump_filter is a bitmask  
  1549. of memory types. If a bit of the bitmask is set, memory segments of the  
  1550. corresponding memory type are dumped, otherwise they are not dumped.  
  1551.   
  1552. The following 7 memory types are supported:  
  1553.   - (bit 0) anonymous private memory  
  1554.   - (bit 1) anonymous shared memory  
  1555.   - (bit 2) file-backed private memory  
  1556.   - (bit 3) file-backed shared memory  
  1557.   - (bit 4) ELF header pages in file-backed private memory areas (it is  
  1558.             effective only if the bit 2 is cleared)  
  1559.   - (bit 5) hugetlb private memory  
  1560.   - (bit 6) hugetlb shared memory  
  1561.   
  1562.   Note that MMIO pages such as frame buffer are never dumped and vDSO pages  
  1563.   are always dumped regardless of the bitmask status.  
  1564.   
  1565.   Note bit 0-4 doesn't effect any hugetlb memory. hugetlb memory are only  
  1566.   effected by bit 5-6.  
  1567.   
  1568. Default value of coredump_filter is 0x23; this means all anonymous memory  
  1569. segments and hugetlb private memory are dumped.  
  1570.   
  1571. If you don't want to dump all shared memory segments attached to pid 1234,  
  1572. write 0x21 to the process's proc file.  
  1573.   
  1574.   $ echo 0x21 > /proc/1234/coredump_filter  
  1575.   
  1576. When a new process is created, the process inherits the bitmask status from its  
  1577. parent. It is useful to set up coredump_filter before the program runs.  
  1578. For example:  
  1579.   
  1580.   $ echo 0x7 > /proc/self/coredump_filter  
  1581.   $ ./some_program  
  1582.   
  1583. 3.5 /proc/<pid>/mountinfo - Information about mounts  
  1584. --------------------------------------------------------  
  1585.   
  1586. This file contains lines of the form:  
  1587.   
  1588. 36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue  
  1589. (1)(2)(3)   (4)   (5)      (6)      (7)   (8) (9)   (10)         (11)  
  1590.   
  1591. (1) mount ID:  unique identifier of the mount (may be reused after umount)  
  1592. (2) parent ID:  ID of parent (or of self for the top of the mount tree)  
  1593. (3) major:minor:  value of st_dev for files on filesystem  
  1594. (4) root:  root of the mount within the filesystem  
  1595. (5) mount point:  mount point relative to the process's root  
  1596. (6) mount options:  per mount options  
  1597. (7) optional fields:  zero or more fields of the form "tag[:value]"  
  1598. (8) separator:  marks the end of the optional fields  
  1599. (9) filesystem type:  name of filesystem of the form "type[.subtype]"  
  1600. (10) mount source:  filesystem specific information or "none"  
  1601. (11) super options:  per super block options  
  1602.   
  1603. Parsers should ignore all unrecognised optional fields.  Currently the  
  1604. possible optional fields are:  
  1605.   
  1606. shared:X  mount is shared in peer group X  
  1607. master:X  mount is slave to peer group X  
  1608. propagate_from:X  mount is slave and receives propagation from peer group X (*)  
  1609. unbindable  mount is unbindable  
  1610.   
  1611. (*) X is the closest dominant peer group under the process's root.  If  
  1612. X is the immediate master of the mount, or if there's no dominant peer  
  1613. group under the same root, then only the "master:X" field is present  
  1614. and not the "propagate_from:X" field.  
  1615.   
  1616. For more information on mount propagation see:  
  1617.   
  1618.   Documentation/filesystems/sharedsubtree.txt  
  1619.   
  1620.   
  1621. 3.6 /proc/<pid>/comm  & /proc/<pid>/task/<tid>/comm  
  1622. --------------------------------------------------------  
  1623. These files provide a method to access a tasks comm value. It also allows for  
  1624. a task to set its own or one of its thread siblings comm value. The comm value  
  1625. is limited in size compared to the cmdline value, so writing anything longer  
  1626. then the kernel's TASK_COMM_LEN (currently 16 chars) will result in a truncated  
  1627. comm value.  
  1628.   
  1629.   
  1630. 3.7 /proc/<pid>/task/<tid>/children - Information about task children  
  1631. -------------------------------------------------------------------------  
  1632. This file provides a fast way to retrieve first level children pids  
  1633. of a task pointed by <pid>/<tid> pair. The format is a space separated  
  1634. stream of pids.  
  1635.   
  1636. Note the "first level" here -- if a child has own children they will  
  1637. not be listed here, one needs to read /proc/<children-pid>/task/<tid>/children  
  1638. to obtain the descendants.  
  1639.   
  1640. Since this interface is intended to be fast and cheap it doesn't  
  1641. guarantee to provide precise results and some children might be  
  1642. skipped, especially if they've exited right after we printed their  
  1643. pids, so one need to either stop or freeze processes being inspected  
  1644. if precise results are needed.  
  1645.   
  1646.   
  1647. 3.7 /proc/<pid>/fdinfo/<fd> - Information about opened file  
  1648. ---------------------------------------------------------------  
  1649. This file provides information associated with an opened file. The regular  
  1650. files have at least two fields -- 'pos' and 'flags'. The 'pos' represents  
  1651. the current offset of the opened file in decimal form [see lseek(2) for  
  1652. details] and 'flags' denotes the octal O_xxx mask the file has been  
  1653. created with [see open(2) for details].  
  1654.   
  1655. A typical output is  
  1656.   
  1657.     pos:    0  
  1658.     flags:  0100002  
  1659.   
  1660. The files such as eventfd, fsnotify, signalfd, epoll among the regular pos/flags  
  1661. pair provide additional information particular to the objects they represent.  
  1662.   
  1663.     Eventfd files  
  1664.     ~~~~~~~~~~~~~  
  1665.     pos:    0  
  1666.     flags:  04002  
  1667.     eventfd-count:  5a  
  1668.   
  1669.     where 'eventfd-count' is hex value of a counter.  
  1670.   
  1671.     Signalfd files  
  1672.     ~~~~~~~~~~~~~~  
  1673.     pos:    0  
  1674.     flags:  04002  
  1675.     sigmask:    0000000000000200  
  1676.   
  1677.     where 'sigmask' is hex value of the signal mask associated  
  1678.     with a file.  
  1679.   
  1680.     Epoll files  
  1681.     ~~~~~~~~~~~  
  1682.     pos:    0  
  1683.     flags:  02  
  1684.     tfd:        5 events:       1d data: ffffffffffffffff  
  1685.   
  1686.     where 'tfd' is a target file descriptor number in decimal form,  
  1687.     'events' is events mask being watched and the 'data' is data  
  1688.     associated with a target [see epoll(7) for more details].  
  1689.   
  1690.     Fsnotify files  
  1691.     ~~~~~~~~~~~~~~  
  1692.     For inotify files the format is the following  
  1693.   
  1694.     pos:    0  
  1695.     flags:  02000000  
  1696.     inotify wd:3 ino:9e7e sdev:800013 mask:800afce ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:7e9e0000640d1b6d  
  1697.   
  1698.     where 'wd' is a watch descriptor in decimal form, ie a target file  
  1699.     descriptor number, 'ino' and 'sdev' are inode and device where the  
  1700.     target file resides and the 'mask' is the mask of events, all in hex  
  1701.     form [see inotify(7) for more details].  
  1702.   
  1703.     If the kernel was built with exportfs support, the path to the target  
  1704.     file is encoded as a file handle.  The file handle is provided by three  
  1705.     fields 'fhandle-bytes', 'fhandle-type' and 'f_handle', all in hex  
  1706.     format.  
  1707.   
  1708.     If the kernel is built without exportfs support the file handle won't be  
  1709.     printed out.  
  1710.   
  1711.     If there is no inotify mark attached yet the 'inotify' line will be omitted.  
  1712.   
  1713.     For fanotify files the format is  
  1714.   
  1715.     pos:    0  
  1716.     flags:  02  
  1717.     fanotify flags:10 event-flags:0  
  1718.     fanotify mnt_id:12 mflags:40 mask:38 ignored_mask:40000003  
  1719.     fanotify ino:4f969 sdev:800013 mflags:0 mask:3b ignored_mask:40000000 fhandle-bytes:8 fhandle-type:1 f_handle:69f90400c275b5b4  
  1720.   
  1721.     where fanotify 'flags' and 'event-flags' are values used in fanotify_init  
  1722.     call, 'mnt_id' is the mount point identifier, 'mflags' is the value of  
  1723.     flags associated with mark which are tracked separately from events  
  1724.     mask. 'ino', 'sdev' are target inode and device, 'mask' is the events  
  1725.     mask and 'ignored_mask' is the mask of events which are to be ignored.  
  1726.     All in hex format. Incorporation of 'mflags', 'mask' and 'ignored_mask'  
  1727.     does provide information about flags and mask used in fanotify_mark  
  1728.     call [see fsnotify manpage for details].  
  1729.   
  1730.     While the first three lines are mandatory and always printed, the rest is  
  1731.     optional and may be omitted if no marks created yet.  
  1732.   
  1733.   
  1734. ------------------------------------------------------------------------------  
  1735. Configuring procfs  
  1736. ------------------------------------------------------------------------------  
  1737.   
  1738. 4.1 Mount options  
  1739. ---------------------  
  1740.   
  1741. The following mount options are supported:  
  1742.   
  1743.     hidepid=    Set /proc/<pid>/ access mode.  
  1744.     gid=        Set the group authorized to learn processes information.  
  1745.   
  1746. hidepid=0 means classic mode - everybody may access all /proc/<pid>/ directories  
  1747. (default).  
  1748.   
  1749. hidepid=1 means users may not access any /proc/<pid>/ directories but their  
  1750. own.  Sensitive files like cmdline, sched*, status are now protected against  
  1751. other users.  This makes it impossible to learn whether any user runs  
  1752. specific program (given the program doesn't reveal itself by its behaviour).  
  1753. As an additional bonus, as /proc/<pid>/cmdline is unaccessible for other users,  
  1754. poorly written programs passing sensitive information via program arguments are  
  1755. now protected against local eavesdroppers.  
  1756.   
  1757. hidepid=2 means hidepid=1 plus all /proc/<pid>/ will be fully invisible to other  
  1758. users.  It doesn't mean that it hides a fact whether a process with a specific  
  1759. pid value exists (it can be learned by other means, e.g. by "kill -0 $PID"),  
  1760. but it hides process' uid and gid, which may be learned by stat()'ing  
  1761. /proc/<pid>/ otherwise.  It greatly complicates an intruder's task of gathering  
  1762. information about running processes, whether some daemon runs with elevated  
  1763. privileges, whether other user runs some sensitive program, whether other users  
  1764. run any program at all, etc.  
  1765.   
  1766. gid= defines a group authorized to learn processes information otherwise  
  1767. prohibited by hidepid=.  If you use some daemon like identd which needs to learn  
  1768. information about processes information, just add identd to this group.  

上面这篇文件时kernel/linux-3.10.y/Documentation/filesystems/proc.txt的原文,下面是翻译。注意翻译省去了一些个人认为不大需要的东西。


0. 目录

1 收集系统信息

1.1 进程子目录

1.2 内核数据

1.3 ide device in /proc/ide

1.4 网络信息  in /proc/net

1.5 SCSI info

1.6 并行串口(Parallel port)信息 in /proc/parport

1.7 TTY info in /proc/tty

1.8 内核统计 in /proc/stat

1.9 Ext4文件系统参数


2 改变系统参数


3 每一个进程参数

3.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_socre_adj 调整oom-killer分数

3.2 /proc/<pid>/oom_score 显示现在的oom-killer分数

3.3 /proc/<pid>/io  display the IO accounting fields

3.4 /proc/<pid>/coredump_filter core dump filtering setttings

3.5 /proc/<pid>/mountinfo 挂载信息

3.6 /proc/<pid>comm & /proc/<pid>/task/<tid>/comm

3.7 /proc/<pid>/task/<tid>/children  task children信息

3.8 /proc/<pid>/fdinfo/<fd> 打开文件信息


4 Configuring procfs 安装proc文件系统

4.1 挂载选项


1. 收集系统信息

这章我们将介绍proc这个文件系统提供的信息、架构、以及关于内核和进程的信息。

proc文件系统呈现了kernel的数据结构。同样它可以获取系统信息和改变内核在运行时的参数


1.1 进程子目录

进程信息都在proc/<pid>目录下

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Table 1-1: Process specific entries in /proc  
  2. ..............................................................................  
  3.  File       Content  
  4.  clear_refs Clears page referenced bits shown in smaps output  
  5.  cmdline    Command line arguments 启动命令参数  
  6.  cpu        Current and last cpu in which it was executed   (2.4)(smp)  
  7.  cwd        Link to the current working directory  当前工作目录  
  8.  environ    Values of environment variables 环境变量  
  9.  exe        Link to the executable of this process  
  10.  fd     Directory, which contains all file descriptors 各个fd的软链接  
  11.  maps       Memory maps to executables and library files    (2.4)  
  12.  mem        Memory held by this process  
  13.  root       Link to the root directory of this process 进程根目录  
  14.  stat       Process status 进程信息  
  15.  statm      Process memory status information 存储信息  
  16.  status     Process status in human readable form 进程信息  
  17.  wchan      If CONFIG_KALLSYMS is set, a pre-decoded wchan  
  18.  pagemap    Page table  
  19.  stack      Report full stack trace, enable via CONFIG_STACKTRACE  
  20.  smaps      a extension based on maps, showing the memory consumption of  
  21.         each mapping and flags associated with it  
  22. ..............................................................................  

举个例子:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. >cat /proc/self/status  
  2. Name:   cat  
  3. State:  R (running)  
  4. Tgid:   5452  
  5. Pid:    5452  
  6. PPid:   743  
  7. TracerPid:      0                       (2.4)  
  8. Uid:    501     501     501     501  
  9. Gid:    100     100     100     100  
  10. FDSize: 256  
  11. Groups: 100 14 16  
  12. VmPeak:     5004 kB  
  13. VmSize:     5004 kB  
  14. VmLck:         0 kB  
  15. VmHWM:       476 kB  
  16. VmRSS:       476 kB  
  17. VmData:      156 kB  
  18. VmStk:        88 kB  
  19. VmExe:        68 kB  
  20. VmLib:      1412 kB  
  21. VmPTE:        20 kb  
  22. VmSwap:        0 kB  
  23. Threads:        1  
  24. SigQ:   0/28578  
  25. SigPnd: 0000000000000000  
  26. ShdPnd: 0000000000000000  
  27. SigBlk: 0000000000000000  
  28. SigIgn: 0000000000000000  
  29. SigCgt: 0000000000000000  
  30. CapInh: 00000000fffffeff  
  31. CapPrm: 0000000000000000  
  32. CapEff: 0000000000000000  
  33. CapBnd: ffffffffffffffff  
  34. Seccomp:        0  
  35. voluntary_ctxt_switches:        0  
  36. nonvoluntary_ctxt_switches:     1  

上面的信息可以同样适用ps命令得到。事实上,ps命令就是用了proc文件系统来获取信息。如果你要获取更多信息就要cat proc/<pid>/status

我们来看下上面各个数据的意义

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Table 1-2: Contents of the status files (as of 2.6.30-rc7)  
  2. ..............................................................................  
  3.  Field                       Content  
  4.  Name                        filename of the executable //文件名  
  5.  State                       state (R is running, S is sleeping, D is sleeping //状态 R S D Z等  
  6.                              in an uninterruptible wait, Z is zombie,  
  7.                  T is traced or stopped)  
  8.  Tgid                        thread group ID 线程租  
  9.  Pid                         process id 进程id  
  10.  PPid                        process id of the parent process 父进程  
  11.  TracerPid                   PID of process tracing this process (0 if not) 跟踪这个进程的pid  
  12.  Uid                         Real, effective, saved set, and  file system UIDs   
  13.  Gid                         Real, effective, saved set, and  file system GIDs  
  14.  FDSize                      number of file descriptor slots currently allocated 已经分配的fd数量  
  15.  Groups                      supplementary group list 属于哪些租  
  16.  VmPeak                      peak virtual memory size  
  17.  VmSize                      total program size  
  18.  VmLck                       locked memory size  
  19.  VmHWM                       peak resident set size ("high water mark")  
  20.  VmRSS                       size of memory portions  
  21.  VmData                      size of data, stack, and text segments  
  22.  VmStk                       size of data, stack, and text segments  
  23.  VmExe                       size of text segment  
  24.  VmLib                       size of shared library code  
  25.  VmPTE                       size of page table entries  
  26.  VmSwap                      size of swap usage (the number of referred swapents)  
  27.  Threads                     number of threads 线程数量  
  28.  SigQ                        number of signals queued/max. number for queue 队列中的信号数量/最大信号数量  
  29.  SigPnd                      bitmap of pending signals for the thread 暂停的信号bit位  
  30.  ShdPnd                      bitmap of shared pending signals for the process  
  31.  SigBlk                      bitmap of blocked signals 阻塞的信号bit位  
  32.  SigIgn                      bitmap of ignored signals 忽略的信号bit位  
  33.  SigCgt                      bitmap of catched signals 捕获到的信号bit位  
  34.  CapInh                      bitmap of inheritable capabilities  
  35.  CapPrm                      bitmap of permitted capabilities  
  36.  CapEff                      bitmap of effective capabilities  
  37.  CapBnd                      bitmap of capabilities bounding set  
  38.  Seccomp                     seccomp mode, like prctl(PR_GET_SECCOMP, ...)  
  39.  Cpus_allowed                mask of CPUs on which this process may run  
  40.  Cpus_allowed_list           Same as previous, but in "list format"  
  41.  Mems_allowed                mask of memory nodes allowed to this process  
  42.  Mems_allowed_list           Same as previous, but in "list format"  
  43.  voluntary_ctxt_switches     number of voluntary context switches  
  44.  nonvoluntary_ctxt_switches  number of non voluntary context switches  
  45. ..............................................................................  

statm文件关于进程更详细的存储使用情况

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Table 1-3: Contents of the statm files (as of 2.6.8-rc3)  
  2. ..............................................................................  
  3.  Field    Content  
  4.  size     total program size (pages)        (same as VmSize in status)  
  5.  resident size of memory portions (pages)   (same as VmRSS in status)  
  6.  shared   number of pages that are shared   (i.e. backed by a file)  
  7.  trs      number of pages that are 'code'   (not including libs; broken,  
  8.                             includes data segment)  
  9.  lrs      number of pages of library        (always 0 on 2.6)  
  10.  drs      number of pages of data/stack     (including libs; broken,  
  11.                             includes library text)  
  12.  dt       number of dirty pages         (always 0 on 2.6)  
  13. ..............................................................................  

stat文件关于进程自己更多详细的信息

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Table 1-4: Contents of the stat files (as of 2.6.30-rc7)  
  2. ..............................................................................  
  3.  Field          Content  
  4.   pid           process id  
  5.   tcomm         filename of the executable  
  6.   state         state (R is running, S is sleeping, D is sleeping in an  
  7.                 uninterruptible wait, Z is zombie, T is traced or stopped)  
  8.   ppid          process id of the parent process  
  9.   pgrp          pgrp of the process  
  10.   sid           session id  
  11.   tty_nr        tty the process uses  
  12.   tty_pgrp      pgrp of the tty  
  13.   flags         task flags  
  14.   min_flt       number of minor faults  
  15.   cmin_flt      number of minor faults with child's  
  16.   maj_flt       number of major faults  
  17.   cmaj_flt      number of major faults with child's  
  18.   utime         user mode jiffies  
  19.   stime         kernel mode jiffies  
  20.   cutime        user mode jiffies with child's  
  21.   cstime        kernel mode jiffies with child's  
  22.   priority      priority level  
  23.   nice          nice level  
  24.   num_threads   number of threads 线程数量  
  25.   it_real_value (obsolete, always 0)  
  26.   start_time    time the process started after system boot 进程开始时间  
  27.   vsize         virtual memory size  
  28.   rss           resident set memory size  
  29.   rsslim        current limit in bytes on the rss  
  30.   start_code    address above which program text can run  
  31.   end_code      address below which program text can run  
  32.   start_stack   address of the start of the main process stack  
  33.   esp           current value of ESP  
  34.   eip           current value of EIP  
  35.   pending       bitmap of pending signals  
  36.   blocked       bitmap of blocked signals  
  37.   sigign        bitmap of ignored signals  
  38.   sigcatch      bitmap of catched signals  
  39.   wchan         address where process went to sleep  
  40.   0             (place holder)  
  41.   0             (place holder)  
  42.   exit_signal   signal to send to parent thread on exit  
  43.   task_cpu      which CPU the task is scheduled on  
  44.   rt_priority   realtime priority  
  45.   policy        scheduling policy (man sched_setscheduler)  
  46.   blkio_ticks   time spent waiting for block IO  
  47.   gtime         guest time of the task in jiffies  
  48.   cgtime        guest time of the task children in jiffies  
  49.   start_data    address above which program data+bss is placed  
  50.   end_data      address below which program data+bss is placed  
  51.   start_brk     address above which program heap can be expanded with brk()  
  52.   arg_start     address above which program command line is placed  
  53.   arg_end       address below which program command line is placed  
  54.   env_start     address above which program environment is placed  
  55.   env_end       address below which program environment is placed  
  56.   exit_code     the thread's exit_code in the form reported by the waitpid system call  
  57. ..............................................................................  


1.2 内核数据

和进程的目录结构类似, proc下面可以获取内核信息。

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Table 1-5: Kernel info in /proc  
  2. ..............................................................................  
  3.  File        Content                                             
  4.  apm         Advanced power management info                      
  5.  buddyinfo   Kernel memory allocator information (see text) (2.5)  
  6.  bus         Directory containing bus specific information       
  7.  cmdline     Kernel command line        内核启动命令                         
  8.  cpuinfo     Info about the CPU          cpu信息                        
  9.  devices     Available devices (block and character)   设备包括字符和块设备          
  10.  dma         Used DMS channels                                   
  11.  filesystems Supported filesystems     支持的文件系统                          
  12.  driver      Various drivers grouped here, currently rtc (2.4) 各种驱动  
  13.  execdomains Execdomains, related to security           (2.4)  
  14.  fb      Frame Buffer devices               (2.4)  
  15.  fs      File system parameters, currently nfs/exports  (2.4)  
  16.  ide         Directory containing info about the IDE subsystem   
  17.  interrupts  Interrupt usage                                     
  18.  iomem       Memory map                     (2.4)  
  19.  ioports     I/O port usage                                      
  20.  irq         Masks for irq to cpu affinity          (2.4)(smp?)  
  21.  isapnp      ISA PnP (Plug&Play) Info               (2.4)  
  22.  kcore       Kernel core image (can be ELF or A.OUT(deprecated in 2.4))     
  23.  kmsg        Kernel messages           内核消息                          
  24.  ksyms       Kernel symbol table       内核符号表                          
  25.  loadavg     Load average of last 1, 5 & 15 minutes                  
  26.  locks       Kernel locks                                        
  27.  meminfo     Memory info      内存信息                                   
  28.  misc        Miscellaneous                                       
  29.  modules     List of loaded modules                              
  30.  mounts      Mounted filesystems     挂载的文件系统                            
  31.  net         Networking info (see text)          网络相关                
  32.  pagetypeinfo Additional page allocator information (see text)  (2.5)  
  33.  partitions  Table of partitions known to the system             
  34.  pci         Deprecated info of PCI bus (new way -> /proc/bus/pci/,  
  35.              decoupled by lspci                 (2.4)  
  36.  rtc         Real time clock      时钟                               
  37.  scsi        SCSI info (see text)                                
  38.  slabinfo    Slab pool info                                      
  39.  softirqs    softirq usage  
  40.  stat        Overall statistics                                  
  41.  swaps       Swap space utilization                              
  42.  sys         See chapter 2                                       
  43.  sysvipc     Info of SysVIPC Resources (msg, sem, shm)      (2.4)  
  44.  tty         Info of tty drivers  
  45.  uptime      System uptime                                       
  46.  version     Kernel version                                      
  47.  video       bttv info of video resources           (2.4)  
  48.  vmallocinfo Show vmalloced areas  
  49. ..............................................................................  

可以通过下面看哪些cpu被中断

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. > cat /proc/interrupts   
  2.            CPU0          
  3.   0:    8728810          XT-PIC  timer   
  4.   1:        895          XT-PIC  keyboard   
  5.   2:          0          XT-PIC  cascade   
  6.   3:     531695          XT-PIC  aha152x   
  7.   4:    2014133          XT-PIC  serial   
  8.   5:      44401          XT-PIC  pcnet_cs   
  9.   8:          2          XT-PIC  rtc   
  10.  11:          8          XT-PIC  i82365   
  11.  12:     182918          XT-PIC  PS/2 Mouse   
  12.  13:          1          XT-PIC  fpu   
  13.  14:    1232265          XT-PIC  ide0   
  14.  15:          7          XT-PIC  ide1   
  15. NMI:          0   

伙伴信息

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. > cat /proc/buddyinfo  
  2.   
  3. Node 0, zone      DMA      0      4      5      4      4      3 ...  
  4. Node 0, zone   Normal      1      0      0      1    101      8 ...  
  5. Node 0, zone  HighMem      2      0      0      1      1      0 ...  
内存信息

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1.  cat /proc/meminfo  
  2.   
  3. The "Locked" indicates whether the mapping is locked in memory or not.  
  4.   
  5.   
  6. MemTotal:     16344972 kB  
  7. MemFree:      13634064 kB  
  8. Buffers:          3656 kB  
  9. Cached:        1195708 kB  
  10. SwapCached:          0 kB  
  11. Active:         891636 kB  
  12. Inactive:      1077224 kB  
  13. HighTotal:    15597528 kB  
  14. HighFree:     13629632 kB  
  15. LowTotal:       747444 kB  
  16. LowFree:          4432 kB  
  17. SwapTotal:           0 kB  
  18. SwapFree:            0 kB  
  19. Dirty:             968 kB  
  20. Writeback:           0 kB  
  21. AnonPages:      861800 kB  
  22. Mapped:         280372 kB  
  23. Slab:           284364 kB  
  24. SReclaimable:   159856 kB  
  25. SUnreclaim:     124508 kB  
  26. PageTables:      24448 kB  
  27. NFS_Unstable:        0 kB  
  28. Bounce:              0 kB  
  29. WritebackTmp:        0 kB  
  30. CommitLimit:   7669796 kB  
  31. Committed_AS:   100056 kB  
  32. VmallocTotal:   112216 kB  
  33. VmallocUsed:       428 kB  
  34. VmallocChunk:   111088 kB  
  35. AnonHugePages:   49152 kB  
  36.   
  37.     MemTotal: Total usable ram (i.e. physical ram minus a few reserved  
  38.               bits and the kernel binary code)  
  39.      MemFree: The sum of LowFree+HighFree  
  40.      Buffers: Relatively temporary storage for raw disk blocks  
  41.               shouldn't get tremendously large (20MB or so)  
  42.       Cached: in-memory cache for files read from the disk (the  
  43.               pagecache).  Doesn't include SwapCached  
  44.   SwapCached: Memory that once was swapped out, is swapped back in but  
  45.               still also is in the swapfile (if memory is needed it  
  46.               doesn't need to be swapped out AGAIN because it is already  
  47.               in the swapfile. This saves I/O)  
  48.       Active: Memory that has been used more recently and usually not  
  49.               reclaimed unless absolutely necessary.  
  50.     Inactive: Memory which has been less recently used.  It is more  
  51.               eligible to be reclaimed for other purposes  
  52.    HighTotal:  
  53.     HighFree: Highmem is all memory above ~860MB of physical memory  
  54.               Highmem areas are for use by userspace programs, or  
  55.               for the pagecache.  The kernel must use tricks to access  
  56.               this memory, making it slower to access than lowmem.  
  57.     LowTotal:  
  58.      LowFree: Lowmem is memory which can be used for everything that  
  59.               highmem can be used for, but it is also available for the  
  60.               kernel's use for its own data structures.  Among many  
  61.               other things, it is where everything from the Slab is  
  62.               allocated.  Bad things happen when you're out of lowmem.  
  63.    SwapTotal: total amount of swap space available  
  64.     SwapFree: Memory which has been evicted from RAM, and is temporarily  
  65.               on the disk  
  66.        Dirty: Memory which is waiting to get written back to the disk  
  67.    Writeback: Memory which is actively being written back to the disk  
  68.    AnonPages: Non-file backed pages mapped into userspace page tables  
  69. AnonHugePages: Non-file backed huge pages mapped into userspace page tables  
  70.       Mapped: files which have been mmaped, such as libraries  
  71.         Slab: in-kernel data structures cache  
  72. SReclaimable: Part of Slab, that might be reclaimed, such as caches  
  73.   SUnreclaim: Part of Slab, that cannot be reclaimed on memory pressure  
  74.   PageTables: amount of memory dedicated to the lowest level of page  
  75.               tables.  
  76. NFS_Unstable: NFS pages sent to the server, but not yet committed to stable  
  77.           storage  
  78.       Bounce: Memory used for block device "bounce buffers"  
  79. WritebackTmp: Memory used by FUSE for temporary writeback buffers  
  80.  CommitLimit: Based on the overcommit ratio ('vm.overcommit_ratio'),  
  81.               this is the total amount of  memory currently available to  
  82.               be allocated on the system. This limit is only adhered to  
  83.               if strict overcommit accounting is enabled (mode 2 in  
  84.               'vm.overcommit_memory').  
  85.               The CommitLimit is calculated with the following formula:  
  86.               CommitLimit = ('vm.overcommit_ratio' * Physical RAM) + Swap  
  87.               For example, on a system with 1G of physical RAM and 7G  
  88.               of swap with a `vm.overcommit_ratio` of 30 it would  
  89.               yield a CommitLimit of 7.3G.  
  90.               For more details, see the memory overcommit documentation  
  91.               in vm/overcommit-accounting.  
  92. Committed_AS: The amount of memory presently allocated on the system.  
  93.               The committed memory is a sum of all of the memory which  
  94.               has been allocated by processes, even if it has not been  
  95.               "used" by them as of yet. A process which malloc()'s 1G  
  96.               of memory, but only touches 300M of it will only show up  
  97.               as using 300M of memory even if it has the address space  
  98.               allocated for the entire 1G. This 1G is memory which has  
  99.               been "committed" to by the VM and can be used at any time  
  100.               by the allocating application. With strict overcommit  
  101.               enabled on the system (mode 2 in 'vm.overcommit_memory'),  
  102.               allocations which would exceed the CommitLimit (detailed  
  103.               above) will not be permitted. This is useful if one needs  
  104.               to guarantee that processes will not fail due to lack of  
  105.               memory once that memory has been successfully allocated.  
  106. VmallocTotal: total size of vmalloc memory area  
  107.  VmallocUsed: amount of vmalloc area which is used  
  108. VmallocChunk: largest contiguous block of vmalloc area which is free  
  109.   
  110. ..............................................................................  


1.4 网络信息

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Table 1-9: Network info in /proc/net  
  2. ..............................................................................  
  3.  File          Content                                                           
  4.  arp           Kernel  ARP table                                                 
  5.  dev           network devices with statistics                                   
  6.  dev_mcast     the Layer2 multicast groups a device is listening too  
  7.                (interface index, label, number of references, number of bound  
  8.                addresses).   
  9.  dev_stat      network device status                                             
  10.  ip_fwchains   Firewall chain linkage                                            
  11.  ip_fwnames    Firewall chain names                                              
  12.  ip_masq       Directory containing the masquerading tables                      
  13.  ip_masquerade Major masquerading table                                          
  14.  netstat       Network statistics         网络统计                                       
  15.  raw           raw device statistics                                             
  16.  route         Kernel routing table                                              
  17.  rpc           Directory containing rpc info                                     
  18.  rt_cache      Routing cache                                                     
  19.  snmp          SNMP data                                                         
  20.  sockstat      Socket statistics                                                 
  21.  tcp           TCP  sockets                                                      
  22.  udp           UDP sockets                                                       
  23.  unix          UNIX domain sockets                                               
  24.  wireless      Wireless interface data (Wavelan etc)                             
  25.  igmp          IP multicast addresses, which this host joined                    
  26.  psched        Global packet scheduler parameters.                               
  27.  netlink       List of PF_NETLINK sockets                                        
  28.  ip_mr_vifs    List of multicast virtual interfaces                              
  29.  ip_mr_cache   List of multicast routing cache                                   
  30. ..............................................................................  


1.8 内核信息

内核信息可以 通过/proc/stat文件:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. > cat /proc/stat  
  2. cpu  2255 34 2290 22625563 6290 127 456 0 0  
  3. cpu0 1132 34 1441 11311718 3675 127 438 0 0  
  4. cpu1 1123 0 849 11313845 2614 0 18 0 0  
  5. intr 114930548 113199788 3 0 5 263 0 4 [... lots more numbers ...]  
  6. ctxt 1990473  
  7. btime 1062191376  
  8. processes 2915  
  9. procs_running 1  
  10. procs_blocked 0  
  11. softirq 183433 0 21755 12 39 1137 231 21459 2263  


下面是cpux从左到右每行意思

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. - user: normal processes executing in user mode  
  2. - nice: niced processes executing in user mode  
  3. - system: processes executing in kernel mode  
  4. - idle: twiddling thumbs  
  5. - iowait: waiting for I/O to complete  
  6. - irq: servicing interrupts  
  7. - softirq: servicing softirqs  
  8. - steal: involuntary wait  
  9. - guest: running a normal guest  
  10. - guest_nice: running a niced guest  


2. 每个进程信息

3.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj

这个用来调整杀进程用

3.2 /proc/<pid>/oom_score

显示这个分数用来杀进程用的

0 0