Wednesday 10 February 2016

Linux System performance checking & Understanding Linux process

Linux System performance checking

1.  VMSTAT -  vmstat reports information about processes, memory, paging, block IO, traps, disks and cpu activity.

eg: vmstat -SM 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    218    309     48    922    0    0   103   103  878 1020 17  5 77  2  0
 1  0    218    309     48    922    0    0     0     0  495 1677  3  1 96  0  0

FIELD DESCRIPTION FOR VM MODE
   Procs
       r: The number of runnable processes (running or waiting for run time).
       b: The number of processes in uninterruptible sleep.

   Memory
       swpd: the amount of virtual memory used.
       free: the amount of idle memory.
       buff: the amount of memory used as buffers.
       cache: the amount of memory used as cache.
       inact: the amount of inactive memory.  (-a option)
       active: the amount of active memory.  (-a option)

   Swap
       si: Amount of memory swapped in from disk (/s).
       so: Amount of memory swapped to disk (/s).

   IO
       bi: Blocks received from a block device (blocks/s).
       bo: Blocks sent to a block device (blocks/s).

   System
       in: The number of interrupts per second, including the clock.
       cs: The number of context switches per second.

CPU
       These are percentages of total CPU time.
       us: Time spent running non-kernel code.  (user time, including nice time)
       sy: Time spent running kernel code.  (system time)
       id: Time spent idle.  Prior to Linux 2.5.41, this includes IO-wait time.
       wa: Time spent waiting for IO.  Prior to Linux 2.5.41, included in idle.
       st: Time stolen from a virtual machine.  Prior to Linux 2.6.11, unknown.

2. IOSTAT - Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions.

eg: iostat -kx 3

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          15.91    0.41    4.37    1.50    0.00   77.81

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               1.55     5.60    4.52    4.78   116.76   116.07    50.11     0.59   63.04   19.66  104.05   6.40   5.95
dm-0              0.00     0.00    4.23    4.74   103.21    94.90    44.19     0.60   66.74   20.44  107.99   6.45   5.78
dm-1              0.00     0.00    1.76    5.26     7.08    21.03     8.01     4.71  672.15   13.89  892.31   0.50   0.35

CPU Utilization Report
              The  first  report generated by the iostat command is the CPU Utilization Report. For multiprocessor systems, the CPU values are global averages among all processors.  The report has the following format:

              %user
                     Show the percentage of CPU utilization that occurred while executing at the user level (application).

              %nice
                     Show the percentage of CPU utilization that occurred while executing at the user level with nice priority.

              %system
                     Show the percentage of CPU utilization that occurred while executing at the system level (kernel).

              %iowait
                     Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.

              %steal
                     Show the percentage of time spent in involuntary wait by the virtual CPU or CPUs while the hypervisor was servicing another virtual processor.

              %idle
                     Show the percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request.

Device Utilization Report
 Device:
                     This column gives the device (or partition) name as listed in the /dev directory.

 tps
          Indicate the number of transfers per second that were issued to the device. A transfer is an  I/O  request  to the  device.  Multiple logical requests can be combined into a single I/O request to the device. A transfer is of indeterminate size.

              Blk_read/s (kB_read/s, MB_read/s)
                     Indicate the amount of data read from the device expressed in a number of blocks  (kilobytes,  megabytes)  per second. Blocks are equivalent to sectors and therefore have a size of 512 bytes.

              Blk_wrtn/s (kB_wrtn/s, MB_wrtn/s)
                     Indicate  the  amount of data written to the device expressed in a number of blocks (kilobytes, megabytes) per second.

              Blk_read (kB_read, MB_read)
                     The total number of blocks (kilobytes, megabytes) read.

              Blk_wrtn (kB_wrtn, MB_wrtn)
                     The total number of blocks (kilobytes, megabytes) written.
rrqm/s
                     The number of read requests merged per second that were queued to the device.

              wrqm/s
                     The number of write requests merged per second that were queued to the device.

              r/s
                     The number (after merges) of read requests completed per second for the device.

              w/s
                     The number (after merges) of write requests completed per second for the device.

              rsec/s (rkB/s, rMB/s)
                     The number of sectors (kilobytes, megabytes) read from the device per second.

              wsec/s (wkB/s, wMB/s)
                     The number of sectors (kilobytes, megabytes) written to the device per second.

              avgrq-sz
                     The average size (in sectors) of the requests that were issued to the device.

              avgqu-sz
                     The average queue length of the requests that were issued to the device.

              await
                     The average time (in milliseconds) for I/O requests issued to the device to be served. This includes the  time spent by the requests in queue and the time spent servicing them.

r_await
                     The average time (in milliseconds) for read requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.

              w_await
                     The average time (in milliseconds) for write requests issued to the device to be  served.  This  includes  the time spent by the requests in queue and the time spent servicing them.

              svctm
                     The  average  service  time (in milliseconds) for I/O requests that were issued to the device. Warning! Do not trust this field any more.  This field will be removed in a future sysstat version.

              %util
                     Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for  the device). Device saturation occurs when this value is close to 100%.


3. MPSTAT - Report processors related statistics.

eg: mpstat 2 2

03:06:47 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:06:49 PM  all    2.77    0.00    0.63    0.13    0.00    0.00    0.00    0.00    0.00   96.47
03:06:51 PM  all    3.13    0.00    0.50    0.13    0.00    0.00    0.00    0.00    0.00   96.24
Average:     all    2.95    0.00    0.57    0.13    0.00    0.00    0.00    0.00    0.00   96.36

Report CPU utilization
The following values are displayed:

              CPU
                     Processor number. The keyword all indicates that statistics are calculated as averages among all processors.

              %usr
                     Show the percentage of CPU utilization that occurred while executing at the user level (application).

              %nice
                     Show the percentage of CPU utilization that occurred while executing at the user level with nice priority.

              %sys
                     Show  the  percentage of CPU utilization that occurred while executing at the system level (kernel). Note that this does not include time spent servicing hardware and software interrupts.

              %iowait
                     Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.

              %irq
                     Show the percentage of time spent by the CPU or CPUs to service hardware interrupts.


 %soft

                     Show the percentage of time spent by the CPU or CPUs to service software interrupts.



              %steal

                     Show the percentage of time spent in involuntary wait by the virtual CPU or CPUs while the hypervisor was servicing another virtual processor.


              %guest
                     Show the percentage of time spent by the CPU or CPUs to run a virtual processor.

              %gnice
                     Show the percentage of time spent by the CPU or CPUs to run a niced guest.

              %idle
                     Show the percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request.


4. ULIMIT - The ulimit and sysctl programs allow to limit system-wide resource use. This can help a lot in system administration, e.g. when a user starts too many processes and therefore makes the system unresponsive for other users.

eg: ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14726
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


5. LSOFlists  on  its standard output file information about files opened by processes
A file is opened when the process or program stored in it is executed and closed when it is no longer required or the associated process or program has terminated. To determine the information such as which files are open, which processes are using them, and who the owners are, the lsof (list open files) command is used. 

eg: lsof -np PID  i.e  lsof -np 22266
COMMAND   PID   USER   FD      TYPE             DEVICE  SIZE/OFF      NODE NAME
vlc     22266 naveen  cwd       DIR              253,0      4096   3307693 /home/naveen
vlc     22266 naveen  rtd       DIR              253,0      4096       192 /
vlc     22266 naveen  txt       REG              253,0     15840  71886477 /usr/bin/vlc

6. STRACE  -  trace system calls and signals.

eg: strace -p PID  i.e.  strace -p 22266
Process 22266 attached
rt_sigtimedwait([HUP INT QUIT TERM], NULL, NULL, 8


Understanding Linux process

Viewing Processes
Heading
Description
UID
User ID of the process owner.
PID
Process ID of the process.
PPID
Process ID of the parent process.
C
The process priority.
STIME
The process start time.
TTY
The terminal on which the process was started. Console represents the system console and ? indicates that the process is a daemon.
TIME
Total execution time for the process.
CMD
The name of the command or the program.
Listing a Specific Process
Listing of linux process can be done using various command like,
top
To determine the linux process, it can be based on
  • Determining Processes by Ownership
  • Process States
  • Process Priority
  • Listing Open Files
Determining Processes by Ownership
Process States

  • The running state determines that the process is currently being executed by the system CPU.
  • The sleeping state shows that the process is currently waiting for input from a user or another process.
  • The waiting state means that the process has received the input it has been waiting for and it is now ready to run as soon as its turn arrives.
  • The stopped state indicates that the process is currently halted and will not run even when its turn comes, unless it is sent a signal.
  • The zombie state designates that the process is dead. A zombie process exists in the process table just as any other process entry, but takes up no resources. The entry for a zombie process is retained until the parent process permits it to die. A zombie process is also called a defunct process.
Process Niceness & How to Set it
Altering Niceness of a Running Process
Listing Open Files

Column
Description
COMMAND
Displays the first nine characters of the command or process name.
PID
Displays the PID of the process.
USER
Displays the owner of the process.
FD
Displays the file descriptor of the file. Some of the values in this field would be:
cwd = current working directory; rtd = root directory;
txt = text file; mem = memory-mapped file; pd = parent directory
TYPE
Displays the node type of the file.
DEVICE
Displays the major and minor numbers of the device on which the file is located
SIZE
Displays the file size or offset in bytes.
NODE
Displays the inode number of the file.
NAME
Displays the file name or the file system name where the file resides.
Memory & CPU Utilization by a particular Process/Command in Linux/UNIX
Example:1 Show how much CPU & Memory Consumed by Chrome:
Example :2 CPU and Memory Consumed By MYSQL daemon
Example:3 Memory & CPU utilized by Apache Daemon-HTTPD

There are two commands commonly used to view currently running processes. These are ps (process status) and top.The ps command without any options or arguments, lists processes specific to the terminal where this command is run:
#ps
  PID TTY          TIME CMD
 7494 pts/0    00:00:00 bash
 9662 pts/0    00:00:00 ps
The output has four columns that show the PID of the process in the first column, theterminal the process belongs to in the second column, the cumulative time the process is given by the system CPU in the third column, and the name of the actual command or program being executed in the last column.
Two options -e (every) and -f (full) are popularly used to generate detailed information on every process running on the system. There are a number of additional options available with the ps command. Check the man pages for details.
# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 10:49 ?        00:00:03 /usr/lib/systemd/systemd --switc
root         2     0  0 10:49 ?        00:00:00 [kthreadd]
root         3     2  0 10:49 ?        00:00:00 [ksoftirqd/0]
The output shows more details about the running processes. Below Table describes the content type of each column.

Notice that in the ps output above there are scores of daemon processes running in the background that have no association with any terminals. Also notice the PID and PPID numbers. The smaller the number, the earlier it is started. The process with PID 0 is started first at system boot, followed by the process with PID 1, and so on. Each PID has an associated PPID in the 3 rd column. The owner of each process is also shown along with the name of the command or program.
Information about each running process is kept and maintained in a process table, which the ps and other commands read to display information.
The second method for viewing the process information is the “top command”, which also displays the CPU, memory, and swap utilization. A sample output from a running top session is shown below :
#top

The pidof command can be used to list the PID of a specific process if you know the name of the process. For example, to list the PID of the crond daemon, run the command as follows:
# pidof chrome
9621 9375 8559 8546 7233 7217 5394 5365 5323 4522 4498 4473 4447 4427 4405 4334 4332 4262 4254 4242




ps
htop


Processes can be listed by their ownership or group membership. The pgrep command is used for this purpose. For example, to list all the processes owned by root, use any of the following:
# ps -U root
# pgrep -U root
After a process is spawned, it does not run continuously. It may be in a non-running condition for a while or waiting for some other process to feed it with information so that it can continue to run.
There are five process states and each process is in one state at any given time. These states are runningsleepingwaitingstopped, and zombie, and are explained below:
The priority of a process (niceness) is determined using the nice value. The system assigns a nice value to a process at initiation to establish a priority. There are 40 nice values with -20 being the highest and +19 the lowest. Most system-started processes use the default nice value of 0. A child process inherits the nice value of its parent process.
Use the ps command and specify the -l option to determine the niceness of running processes. See the associated nicenesses for each process under the NI column:
eg: $ ps -efl
To determine the default niceness, use the nice command without any options or arguments:
eg: $ nice
0
A different priority may be assigned to a program or command at its startup. For example, to run the top command at a lower priority of +3:
# nice -3 top
Use the ps command with the -l option, or view the output of the top command, and validate the niceness of the process. It should be +3.
To run the same program at a higher priority with the niceness of -3, specify the value with a pair of dashes:
# nice --3 top
The niceness of a running program may be altered using the renice command. For example, to change the nice value of top while it is running from -3 to -6, specify the PID (908) with the renice command:
#renice -6 908
To alter the nice values of all the processes owned by members of a particular group, use the -g option with renice. Similarly, to alter the nice values of all the processes owned by a particular user, use the -u option with it. Run the renice command without any options to view its usage.
A file is opened when the process or program stored in it is executed and closed when it is no longer required or the associated process or program has terminated. To determine the information such as which files are open, which processes are using them, and who the owners are, the lsof (list open files) command is used. Without any options, this command displays a list of all open files.
# lsof

The command generated nine columns in the output; these are listed and explained in the below table :

with help of “ps” and “pidof” commads we can determine how much cpu and memory is consumed or used by particular process and command.
Where “ps(process status)” displays information about the current active processes.Pidof finds the process id's (pids) of the named programs. It prints those id's on the standard output.
#ps -p $(pidof chrome | sed 's/\s/,/g') -o %cpu,%mem,cmd

ps -p $(pidof mysqld | sed 's/\s/,/g') -o %cpu,%mem,cmd


ps -p $(pidof httpd | sed 's/\s/,/g') -o %cpu,%mem,cmd



To see every process with a user-defined format:

#ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu 
# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
#  ps -Ao pid,tt,user,fname,tmout,f,wchan



No comments:

Post a Comment