Friday 25 April 2014

proc_pid_stat

External links:

https://www.kernel.org/doc/Documentation/filesystems/proc.txt

http://brokestream.com/procstat.html


################################################################



Most of the time we need to know the different stat of a running process and we can find there information on the proc file system.

Lets say a java process is running at process id: 21879, and we need to know the stack size of that process, then we can use the following command. As per some reference, we can find the stack size stay on 23 field number.

so the command will be as per the example:

awk '{print $23}' /proc/21879/stat 

heap=$(awk '{print $23}' /proc/21879/stat) ; echo $heap

You can also use codes from "man proc" about stats to format data in "ps" command, like:

ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm | grep <PID number>


you can use pidof java to get the pid information of your java process.




################# /proc/pid/stat ########################3

Table 1-4: Contents of the stat files (as of 2.6.30-rc7)
..............................................................................
 Field          Content
  pid           process id
  tcomm         filename of the executable
  state         state (R is running, S is sleeping, D is sleeping in an
                uninterruptible wait, Z is zombie, T is traced or stopped)
  ppid          process id of the parent process
  pgrp          pgrp of the process
  sid           session id
  tty_nr        tty the process uses
  tty_pgrp      pgrp of the tty
  flags         task flags
  min_flt       number of minor faults
  cmin_flt      number of minor faults with child's
  maj_flt       number of major faults
  cmaj_flt      number of major faults with child's
  utime         user mode jiffies
  stime         kernel mode jiffies
  cutime        user mode jiffies with child's
  cstime        kernel mode jiffies with child's
  priority      priority level
  nice          nice level
  num_threads   number of threads
  it_real_value    (obsolete, always 0)
  start_time    time the process started after system boot
  vsize         virtual memory size
  rss           resident set memory size
  rsslim        current limit in bytes on the rss
  start_code    address above which program text can run
  end_code      address below which program text can run
  start_stack   address of the start of the main process stack
  esp           current value of ESP
  eip           current value of EIP
  pending       bitmap of pending signals
  blocked       bitmap of blocked signals
  sigign        bitmap of ignored signals
  sigcatch      bitmap of catched signals
  wchan         address where process went to sleep
  0             (place holder)
  0             (place holder)
  exit_signal   signal to send to parent thread on exit
  task_cpu      which CPU the task is scheduled on
  rt_priority   realtime priority
  policy        scheduling policy (man sched_setscheduler)
  blkio_ticks   time spent waiting for block IO
  gtime         guest time of the task in jiffies
  cgtime        guest time of the task children in jiffies
  start_data    address above which program data+bss is placed
  end_data      address below which program data+bss is placed
  start_brk     address above which program heap can be expanded with brk()
  arg_start     address above which program command line is placed
  arg_end       address below which program command line is placed
  env_start     address above which program environment is placed
  env_end       address below which program environment is placed
  exit_code     the thread's exit_code in the form reported by the waitpid system call



##################### /proc/pid/status ############################

for i in `pidof java`; do grep Threads /proc/$i/status; done
Threads:    38
Threads:    15
Threads:    31

=======================================================================

sample output of status proc pid file:

cat /proc/21879/status
Name:    java
State:    S (sleeping)
Tgid:    21879
Pid:    21879
PPid:    1
TracerPid:    0
Uid:    1001    1001    1001    1001
Gid:    1001    1001    1001    1001
FDSize:    256
Groups:    1001
VmPeak:     1219112 kB
VmSize:     1210356 kB
VmLck:           0 kB
VmHWM:      167016 kB
VmRSS:      147272 kB
VmData:     1196816 kB
VmStk:          92 kB
VmExe:          40 kB
VmLib:       12944 kB
VmPTE:         400 kB
Threads:    38
SigQ:    0/16382
SigPnd:    0000000000000000
ShdPnd:    0000000000000000
SigBlk:    0000000000000000
SigIgn:    0000000000000003
SigCgt:    1000000181005ccc
CapInh:    0000000000000000
CapPrm:    0000000000000000
CapEff:    0000000000000000
CapBnd:    ffffffffffffffff
Cpus_allowed:    3
Cpus_allowed_list:    0-1
Mems_allowed:    1
Mems_allowed_list:    0
voluntary_ctxt_switches:    20
nonvoluntary_ctxt_switches:    2


Table 1-2: Contents of the status files (as of 2.6.30-rc7)
..............................................................................
 Field                       Content
 Name                        filename of the executable
 State                       state (R is running, S is sleeping, D is sleeping
                             in an uninterruptible wait, Z is zombie,
                 T is traced or stopped)
 Tgid                        thread group ID
 Pid                         process id
 PPid                        process id of the parent process
 TracerPid                   PID of process tracing this process (0 if not)
 Uid                         Real, effective, saved set, and  file system UIDs
 Gid                         Real, effective, saved set, and  file system GIDs
 FDSize                      number of file descriptor slots currently allocated
 Groups                      supplementary group list
 VmPeak                      peak virtual memory size
 VmSize                      total program size
 VmLck                       locked memory size
 VmHWM                       peak resident set size ("high water mark")
 VmRSS                       size of memory portions
 VmData                      size of data, stack, and text segments
 VmStk                       size of data, stack, and text segments
 VmExe                       size of text segment
 VmLib                       size of shared library code
 VmPTE                       size of page table entries
 VmSwap                      size of swap usage (the number of referred swapents)
 Threads                     number of threads
 SigQ                        number of signals queued/max. number for queue
 SigPnd                      bitmap of pending signals for the thread
 ShdPnd                      bitmap of shared pending signals for the process
 SigBlk                      bitmap of blocked signals
 SigIgn                      bitmap of ignored signals
 SigCgt                      bitmap of catched signals
 CapInh                      bitmap of inheritable capabilities
 CapPrm                      bitmap of permitted capabilities
 CapEff                      bitmap of effective capabilities
 CapBnd                      bitmap of capabilities bounding set
 Seccomp                     seccomp mode, like prctl(PR_GET_SECCOMP, ...)
 Cpus_allowed                mask of CPUs on which this process may run
 Cpus_allowed_list           Same as previous, but in "list format"
 Mems_allowed                mask of memory nodes allowed to this process
 Mems_allowed_list           Same as previous, but in "list format"
 voluntary_ctxt_switches     number of voluntary context switches
 nonvoluntary_ctxt_switches  number of non voluntary context switches

######################################################################
cat /proc/21879/statm
302589 36966 2191 10 0 299227 0

Table 1-3: Contents of the statm files (as of 2.6.8-rc3)
..............................................................................
 Field    Content
 size     total program size (pages)        (same as VmSize in status)
 resident size of memory portions (pages)    (same as VmRSS in status)
 shared   number of pages that are shared    (i.e. backed by a file)
 trs      number of pages that are 'code'    (not including libs; broken,
                            includes data segment)
 lrs      number of pages of library        (always 0 on 2.6)
 drs      number of pages of data/stack        (including libs; broken,
                            includes library text)
 dt       number of dirty pages            (always 0 on 2.6)



#################################

 /proc/21879# cat io
rchar: 79214336508
wchar: 79227167997
syscr: 20996240
syscw: 20059217
read_bytes: 48635904
write_bytes: 79561936896
cancelled_write_bytes: 1781272576



#################################

/proc/21879# cat limits
Limit                     Soft Limit           Hard Limit           Units    
Max cpu time              unlimited            unlimited            seconds  
Max file size             unlimited            unlimited            bytes    
Max data size             unlimited            unlimited            bytes    
Max stack size            8388608              unlimited            bytes    
Max core file size        0                    unlimited            bytes    
Max resident set          unlimited            unlimited            bytes    
Max processes             unlimited            unlimited            processes
Max open files            1024                 1024                 files    
Max locked memory         65536                65536                bytes    
Max address space         unlimited            unlimited            bytes    
Max file locks            unlimited            unlimited            locks    
Max pending signals       16382                16382                signals  
Max msgqueue size         819200               819200               bytes    
Max nice priority         20                   20                  
Max realtime priority     0                    0                   
Max realtime timeout      unlimited            unlimited            us       


#################################

/proc/21879# cat sched
java (21879, #threads: 38)
---------------------------------------------------------
se.exec_start                      :     521472717.252865
se.vruntime                        :        943088.844576
se.sum_exec_runtime                :            25.769130
se.avg_overlap                     :             0.234375
se.avg_wakeup                      :             2.000000
se.avg_running                     :             1.557718
se.wait_start                      :             0.000000
se.sleep_start                     :     521472717.252865
se.block_start                     :             0.000000
se.sleep_max                       :           104.997369
se.block_max                       :             0.000000
se.exec_max                        :             8.526763
se.slice_max                       :             3.511830
se.wait_max                        :             2.171300
se.wait_sum                        :             2.886877
se.wait_count                      :                   22
se.iowait_sum                      :          1783.892404
se.iowait_count                    :                 6247
sched_info.bkl_count               :                    0
se.nr_migrations                   :                    0
se.nr_migrations_cold              :                    0
se.nr_failed_migrations_affine     :                    0
se.nr_failed_migrations_running    :                    0
se.nr_failed_migrations_hot        :                    0
se.nr_forced_migrations            :                    0
se.nr_forced2_migrations           :                    0
se.nr_wakeups                      :                   19
se.nr_wakeups_sync                 :                   19
se.nr_wakeups_migrate              :                    0
se.nr_wakeups_local                :                   19
se.nr_wakeups_remote               :                    0
se.nr_wakeups_affine               :                    0
se.nr_wakeups_affine_attempts      :                    0
se.nr_wakeups_passive              :                    0
se.nr_wakeups_idle                 :                    0
avg_atom                           :             1.171324
avg_per_cpu                        :             0.000001
nr_switches                        :                   22
nr_voluntary_switches              :                   20
nr_involuntary_switches            :                    2
se.load.weight                     :                 1024
policy                             :                    0
prio                               :                  120
clock-delta                        :                  255




#################################

/proc/21879# cat sessionid
4294967295

#################################

/proc/21879# cat stack
[<c015919c>] futex_wait_queue_me+0xac/0xd0
[<c0159ac4>] futex_wait+0xf4/0x220
[<c015bb16>] do_futex+0xe6/0x1f0
[<c015bc89>] sys_futex+0x69/0x110
[<c01047e0>] syscall_call+0x7/0xb
[<ffffffff>] 0xffffffff


#################################

NOTE: /proc/pid/task: [ each directory is for each thread ]

#################################


Table 1-5: Kernel info in /proc
..............................................................................
 File        Content                                          
 apm         Advanced power management info                   
 buddyinfo   Kernel memory allocator information (see text)    (2.5)
 bus         Directory containing bus specific information    
 cmdline     Kernel command line                              
 cpuinfo     Info about the CPU                               
 devices     Available devices (block and character)          
 dma         Used DMS channels                                
 filesystems Supported filesystems                            
 driver         Various drivers grouped here, currently rtc (2.4)
 execdomains Execdomains, related to security            (2.4)
 fb         Frame Buffer devices                (2.4)
 fs         File system parameters, currently nfs/exports    (2.4)
 ide         Directory containing info about the IDE subsystem
 interrupts  Interrupt usage                                  
 iomem         Memory map                        (2.4)
 ioports     I/O port usage                                   
 irq         Masks for irq to cpu affinity            (2.4)(smp?)
 isapnp         ISA PnP (Plug&Play) Info                (2.4)
 kcore       Kernel core image (can be ELF or A.OUT(deprecated in 2.4))  
 kmsg        Kernel messages                                  
 ksyms       Kernel symbol table                              
 loadavg     Load average of last 1, 5 & 15 minutes               
 locks       Kernel locks                                     
 meminfo     Memory info                                      
 misc        Miscellaneous                                    
 modules     List of loaded modules                           
 mounts      Mounted filesystems                              
 net         Networking info (see text)                       
 pagetypeinfo Additional page allocator information (see text)  (2.5)
 partitions  Table of partitions known to the system          
 pci         Deprecated info of PCI bus (new way -> /proc/bus/pci/,
             decoupled by lspci                    (2.4)
 rtc         Real time clock                                  
 scsi        SCSI info (see text)                             
 slabinfo    Slab pool info                                   
 softirqs    softirq usage
 stat        Overall statistics                               
 swaps       Swap space utilization                           
 sys         See chapter 2                                    
 sysvipc     Info of SysVIPC Resources (msg, sem, shm)        (2.4)
 tty         Info of tty drivers
 uptime      Wall clock since boot, combined idle time of all cpus
 version     Kernel version                                   
 video         bttv info of video resources            (2.4)
 vmallocinfo Show vmalloced areas


#################################

meminfo:

Provides information about distribution and utilization of memory.  This
varies by architecture and compile options.  The following is from a
16GB PIII, which has highmem enabled.  You may not have all of these fields.

> cat /proc/meminfo

The "Locked" indicates whether the mapping is locked in memory or not.


MemTotal:     16344972 kB
MemFree:      13634064 kB
MemAvailable: 14836172 kB
Buffers:          3656 kB
Cached:        1195708 kB
SwapCached:          0 kB
Active:         891636 kB
Inactive:      1077224 kB
HighTotal:    15597528 kB
HighFree:     13629632 kB
LowTotal:       747444 kB
LowFree:          4432 kB
SwapTotal:           0 kB
SwapFree:            0 kB
Dirty:             968 kB
Writeback:           0 kB
AnonPages:      861800 kB
Mapped:         280372 kB
Slab:           284364 kB
SReclaimable:   159856 kB
SUnreclaim:     124508 kB
PageTables:      24448 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
WritebackTmp:        0 kB
CommitLimit:   7669796 kB
Committed_AS:   100056 kB
VmallocTotal:   112216 kB
VmallocUsed:       428 kB
VmallocChunk:   111088 kB
AnonHugePages:   49152 kB

    MemTotal: Total usable ram (i.e. physical ram minus a few reserved
              bits and the kernel binary code)
     MemFree: The sum of LowFree+HighFree
MemAvailable: An estimate of how much memory is available for starting new
              applications, without swapping. Calculated from MemFree,
              SReclaimable, the size of the file LRU lists, and the low
              watermarks in each zone.
              The estimate takes into account that the system needs some
              page cache to function well, and that not all reclaimable
              slab will be reclaimable, due to items being in use. The
              impact of those factors will vary from system to system.
     Buffers: Relatively temporary storage for raw disk blocks
              shouldn't get tremendously large (20MB or so)
      Cached: in-memory cache for files read from the disk (the
              pagecache).  Doesn't include SwapCached
  SwapCached: Memory that once was swapped out, is swapped back in but
              still also is in the swapfile (if memory is needed it
              doesn't need to be swapped out AGAIN because it is already
              in the swapfile. This saves I/O)
      Active: Memory that has been used more recently and usually not
              reclaimed unless absolutely necessary.
    Inactive: Memory which has been less recently used.  It is more
              eligible to be reclaimed for other purposes
   HighTotal:
    HighFree: Highmem is all memory above ~860MB of physical memory
              Highmem areas are for use by userspace programs, or
              for the pagecache.  The kernel must use tricks to access
              this memory, making it slower to access than lowmem.
    LowTotal:
     LowFree: Lowmem is memory which can be used for everything that
              highmem can be used for, but it is also available for the
              kernel's use for its own data structures.  Among many
              other things, it is where everything from the Slab is
              allocated.  Bad things happen when you're out of lowmem.
   SwapTotal: total amount of swap space available
    SwapFree: Memory which has been evicted from RAM, and is temporarily
              on the disk
       Dirty: Memory which is waiting to get written back to the disk
   Writeback: Memory which is actively being written back to the disk
   AnonPages: Non-file backed pages mapped into userspace page tables
AnonHugePages: Non-file backed huge pages mapped into userspace page tables
      Mapped: files which have been mmaped, such as libraries
        Slab: in-kernel data structures cache
SReclaimable: Part of Slab, that might be reclaimed, such as caches
  SUnreclaim: Part of Slab, that cannot be reclaimed on memory pressure
  PageTables: amount of memory dedicated to the lowest level of page
              tables.
NFS_Unstable: NFS pages sent to the server, but not yet committed to stable
          storage
      Bounce: Memory used for block device "bounce buffers"
WritebackTmp: Memory used by FUSE for temporary writeback buffers
 CommitLimit: Based on the overcommit ratio ('vm.overcommit_ratio'),
              this is the total amount of  memory currently available to
              be allocated on the system. This limit is only adhered to
              if strict overcommit accounting is enabled (mode 2 in
              'vm.overcommit_memory').
              The CommitLimit is calculated with the following formula:
              CommitLimit = ('vm.overcommit_ratio' * Physical RAM) + Swap
              For example, on a system with 1G of physical RAM and 7G
              of swap with a `vm.overcommit_ratio` of 30 it would
              yield a CommitLimit of 7.3G.
              For more details, see the memory overcommit documentation
              in vm/overcommit-accounting.
Committed_AS: The amount of memory presently allocated on the system.
              The committed memory is a sum of all of the memory which
              has been allocated by processes, even if it has not been
              "used" by them as of yet. A process which malloc()'s 1G
              of memory, but only touches 300M of it will show up as
          using 1G. This 1G is memory which has been "committed" to
              by the VM and can be used at any time by the allocating
              application. With strict overcommit enabled on the system
              (mode 2 in 'vm.overcommit_memory'),allocations which would
              exceed the CommitLimit (detailed above) will not be permitted.
              This is useful if one needs to guarantee that processes will
              not fail due to lack of memory once that memory has been
              successfully allocated.
VmallocTotal: total size of vmalloc memory area
 VmallocUsed: amount of vmalloc area which is used
VmallocChunk: largest contiguous block of vmalloc area which is free

#################################

3.3  /proc/<pid>/io - Display the IO accounting fields
-------------------------------------------------------

This file contains IO statistics for each running process

Example
-------

test:/tmp # dd if=/dev/zero of=/tmp/test.dat &
[1] 3828

test:/tmp # cat /proc/3828/io
rchar: 323934931
wchar: 323929600
syscr: 632687
syscw: 632675
read_bytes: 0
write_bytes: 323932160
cancelled_write_bytes: 0


Description
-----------

rchar
-----

I/O counter: chars read
The number of bytes which this task has caused to be read from storage. This
is simply the sum of bytes which this process passed to read() and pread().
It includes things like tty IO and it is unaffected by whether or not actual
physical disk IO was required (the read might have been satisfied from
pagecache)


wchar
-----

I/O counter: chars written
The number of bytes which this task has caused, or shall cause to be written
to disk. Similar caveats apply here as with rchar.


syscr
-----

I/O counter: read syscalls
Attempt to count the number of read I/O operations, i.e. syscalls like read()
and pread().


syscw
-----

I/O counter: write syscalls
Attempt to count the number of write I/O operations, i.e. syscalls like
write() and pwrite().


read_bytes
----------

I/O counter: bytes read
Attempt to count the number of bytes which this process really did cause to
be fetched from the storage layer. Done at the submit_bio() level, so it is
accurate for block-backed filesystems. <please add status regarding NFS and
CIFS at a later time>


write_bytes
-----------

I/O counter: bytes written
Attempt to count the number of bytes which this process caused to be sent to
the storage layer. This is done at page-dirtying time.


cancelled_write_bytes
---------------------

The big inaccuracy here is truncate. If a process writes 1MB to a file and
then deletes the file, it will in fact perform no writeout. But it will have
been accounted as having caused 1MB of write.
In other words: The number of bytes which this process caused to not happen,
by truncating pagecache. A task can cause "negative" IO too. If this task
truncates some dirty pagecache, some IO which another task has been accounted
for (in its write_bytes) will not be happening. We _could_ just subtract that
from the truncating task's write_bytes, but there is information loss in doing
that.

#################################
#################################

No comments:

Post a Comment