分类: LINUX
2011-07-29 09:51:40
Whenever a Linux system CPU is occupied by a process, it is unavailable for processing other requests. Rest of pending requests must wait till CPU is free. This becomes a bottleneck in the system. Following command will help you to identify CPU utilization, so that you can troubleshoot CPU related performance problems.
Finding CPU utilization is one of the important tasks. Linux comes with various utilities to report CPU utilization. With these commands, you will be able to find out:
* CPU utilization
* Display the utilization of each CPU individually (SMP cpu)
* Find out your system's average CPU utilization since the last reboot etc
* Determine which process is eating the CPU(s)
The top program provides a dynamic real-time view of a running
system. It can display system summary information as well as a list of
tasks currently being managed by the Linux kernel.
The top command monitors CPU utilization, process statistics, and memory
utilization. The top section contains information related to overall
system status - uptime, load average, process counts, CPU status, and
utilization statistics for both memory and swap space.
Type the top command:
$ top
You can see Linux CPU utilization under CPU stats. The task’s share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time. In a true SMP environment (multiple CPUS), top will operate in number of CPUs. Please note that you need to type q key to exit the top command display.
The top command produces a frequently-updated list of processes. By default, the processes are ordered by percentage of CPU usage, with only the "top" CPU consumers shown. The top command shows how much processing power and memory are being used, as well as other information about the running processes.
Find Linux CPU utilization using mpstat and other toolsPlease note that you need to install special package called sysstat to take advantage of following commands. This package includes system performance tools for Linux (Red Hat Linux / RHEL includes these tools by default).
# apt-get install sysstat
Use up2date command if you are using RHEL:
# up2date sysstat
If you are using SMP (Multiple CPU) system, use mpstat command to
display the utilization of each CPU individually. It report processors
related statistics. For example, type command:
# mpstat Output:
The mpstat command display activities for each available processor,
processor 0 being the first one. Global average activities among all
processors are also reported. The mpstat command can be used both on
SMP and UP machines, but in the latter, only global average activities
will be printed.:
# mpstat -P ALL
Output:
Another output from my HP Dual Opteron 64 bit server:# mpstat -P ALLOutput:
Linux 2.6.5-7.252-smp (ora9.xxx.in) 04/07/06 07:44:18 CPU %user %nice %system %iowait %irq %soft %idle intr/s 07:44:18 all 3.01 57.31 0.36 0.13 0.01 0.00 39.19 1063.46 07:44:18 0 5.87 69.47 0.44 0.05 0.01 0.01 24.16 262.11 07:44:18 1 1.79 48.59 0.36 0.23 0.00 0.00 49.02 268.92 07:44:18 2 2.19 42.63 0.28 0.16 0.01 0.00 54.73 260.96 07:44:18 3 2.17 68.56 0.34 0.06 0.03 0.00 28.83 271.47 Report CPU utilization using sar commandYou can display today’s CPU activity, with sar command:
# sar
Output:
The sar command writes to standard output the contents of selected
cumulative activity counters in the operating system. The
accounting system, based on the values in the count and interval
parameters. For example display comparison of CPU utilization; 2 seconds
apart; 5 times, use:
# sar -u 2 5
Output (for each 2 seconds. 5 lines are displayed):
Where,
To get multiple samples and multiple reports set an output file for
the sar command. Run the sar command as a background process using.
# sar -o output.file 12 8 >/dev/null 2>&1 &
Better use nohup command so that you can logout and check back report later on:
# nohup sar -o output.file 12 8 >/dev/null 2>&1 &
All data is captured in binary form and saved to a file
(data.file). The data can then be selectively displayed ith the sar
command using the -f option.
# sar -f data.file
Finally, you need to determine which process is monopolizing or
eating the CPUs. Following command will displays the top 10 CPU users on
the Linux system.
# ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10
OR
# ps -eo pcpu,pid,user,args | sort -r -k1 | less
Output:
Now you know vmware-vmx process is eating up lots of CPU power. ps command displays every process (-e) with a user-defined format (-o pcpu). First field is pcpu (cpu utilization). It is sorted in reverse order to display top 10 CPU eating process.
iostat commandYou can also use iostat command which report Central Processing Unit
(CPU) statistics and input/output statistics for devices and
partitions. It can be use to find out your system's average CPU
utilization since the last reboot.
# iostatOutput:
You may want to use following command, which gives you three outputs every 5 seconds (as previous command gives information since the last reboot):$ iostat -xtc 5 3
GUI tools for your laptops/desktopsAbove tools/commands are quite useful on remote server. For local
system with X GUI installed you can try out gnome-system-monitor. It
allows you to view and control the processes running on your system.
You can access detailed memory maps, send signals, and terminate the
processes.
$ gnome-system-monitor
(Click to enlarge image)
In addition, the gnome-system-monitor provides an overall view of the resource usage on your system, including memory and CPU allocation.
(Click to enlarge image)