系统调优概述

分析是否有瓶颈(依据当前应用需求)

调优(把错误的调正确,把差的调到最好的)

系统的运行状况:  CPU->  MEM  ->DISK ->  NETWORK -> 应用程序调优

性能优化

性能优化就是找到系统处理中的瓶颈以及去除这些的过程。

性能优化其实是对 OS 各子系统达到一种平衡的定义,这些子系统包括了:CPU ;Memory ;IO ;Network;

这些子系统之间关系是相互彼此依赖的,任何一个高负载都会导致其他子系统出现问题。

例如: 

大量的网页调入请求导致内存队列的拥塞; 

网卡的大吞吐量可能导致更多的 CPU 开销;  

大量来自内存的磁盘写请求可能导致更多的 CPU 以及 IO 问题;

所以要对一个系统进行优化,查找瓶颈来自哪个方面是关键,虽然看似是某一个子系统出现问题,其实有可能是别的子系统导致的.

调优就像医生看病,因此需要你对服务器所有地方都了解清楚。

CPU状态相关工具

想要调优,想了解系统状态,通过命令和文件都可以反应当前CPU负载的相关情况

查看系统运行相关命令状况:

常用命令
uptime
hostname
uname -a
id
who
whoami
w
free  
top
# uptime
 15:12:46 up 2 days,  1:40,  1 user,  load average: 0.00, 0.01, 0.05

uptime命令各个内容解释如下:

19:49:06

当前时间

up 2 days

系统运行时间 ,说明此服务器连续运行50天了

1 users

当前登录用户数

load average: 0.00, 0.01, 0.05

系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

负载的数字记得跟你的处理器有关:如果服务器的 CPU 为 1 核心,则 load average 中的数字  >=3  负载过高,如果服务器的 CPU 为 4 核心,则 load average 中的数字  >=12  负载过高。为什么?了解一下处理器处理进程的相关原理

 

87ca48768ba4d5e067c3554fded5639abca.jpg

例如:上图,1个在运行,两个进程在排队,队列数包含运行进程,也就是三个进程,CPU已经处理不过来了,就意味着负载过高了!一般来说,一个在处理,一个在等待,那么我们认为负载正常,但是如果有一个已经在等待了,还有一个加入等待,那么证明CPU处理能力达到了瓶颈,负载以及过高了!

1,5,15系统平均负载
1分钟的系统负载,指的是1分钟系统中持续运行的进程个数
理论上:单核心,1分钟的系统平均负载不要超过3

/proc目录

通过/proc目录下的文件了解系统实施运行状态

cpuinfo
[root@local ~]# cat /proc/cpuinfo //CPU参数
processor   : 0     #系统中逻辑处理核的编号。对于单核处理器,则课认为是其CPU编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核
vendor_id   : GenuineIntel      #CPU制造商      
cpu family  : 6                 #CPU产品系列代号
model       : 62                #CPU属于其系列中的哪一代的代号
model name  : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz #CPU属于的名字及其编号、标称主频
stepping    : 4                 #CPU属于制作更新版本
microcode   : 1064              #BIOS相关
cpu MHz     : 2600.092          #CPU的实际使用主频
cache size  : 20480 KB          #CPU二级缓存大小
physical id : 0                 #单个CPU的标号
siblings    : 1                 #单个CPU逻辑物理核数
core id     : 0                 #当前物理核在其所处CPU中的编号,这个编号不一定连续
cpu cores   : 8                 #该逻辑核所处CPU的物理核数
apicid      : 0                 #用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
fpu     : yes                   #是否具有浮点运算单元(Floating Point Unit)
fpu_exception   : yes           #是否支持浮点计算异常
cpuid level : 13                #执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容
wp      : yes                   #表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc up rep_good unfair_spinlock pni ssse3 cx16 sse4_1 sse4_2 popcnt aes hypervisor lahf_lm #当前CPU支持的功能
bogomips    : 5200.18           #在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
clflush size    : 64            #每次刷新缓存的大小单位
cache_alignment : 64            #缓存地址对齐单位
address sizes   : 46 bits physical, 48 bits virtual     #访问地址空间位数
power management:               #对能源管理的支持有哪些
……
cpu cores   : 8                     #8核心
……
processor   : 1
……
processor   : 7

cmdline

cat /proc/cmdline //获取内核命令行参数
ro root=UUID=94e4e384-0ace-437f-bc96-057dd64f42ee rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16   KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
注意这里的/proc/cmdline和/etc/grub.conf的内容一样

 

# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,0)
#          kernel /boot/vmlinuz-version ro root=/dev/xvda1
#          initrd /boot/initrd-[generic-]version.img
#boot=/dev/xvda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-573.8.1.el6.x86_64)
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.32-573.8.1.el6.x86_64 ro root=UUID=94e4e384-0ace-437f-bc96-057dd64f42ee rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /boot/initramfs-2.6.32-573.8.1.el6.x86_64.img
title CentOS (2.6.32-431.23.3.el6.x86_64)
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.32-431.23.3.el6.x86_64 ro root=UUID=94e4e384-0ace-437f-bc96-057dd64f42ee rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /boot/initramfs-2.6.32-431.23.3.el6.x86_64.img

diskstats

cat /proc/diskstats //相当于fdisk -l
   8       0 sda 6981 5394 439682 76909 750 2301 24402 107850 0 34562 184763
   8       1 sda1 591 236 4632 530 3 0 18 88 0 564 618
   8       2 sda2 5884 5126 430746 75212 747 2301 24384 107762 0 34085 182980
   8       3 sda3 332 31 2904 1051 0 0 0 0 0 1050 1050
  11       0 sr0 53 47 536 128 0 0 0 0 0 115 128
# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00092896
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        1332    10485760   83  Linux
/dev/sda3            1332        1462     1048576   82  Linux swap / Solaris
这个文件列出字符和块设备的主设备号,以及分配到这些设备号的设备名称。

filesystems

查看当前系统中可以支持的文件系统类型 ,这个文件列出可供使用的文件系统类型,一种类型一行。虽然它们通常是编入内核的文件系统类型,但该文件还可以包含可加载的内核模块加入的其它文件系统类型。  nodev 表示支持但不存在,没使用

cat /proc/filesystems
……
nodev   ramfs
nodev   hugetlbfs       #未使用
    iso9660             #使用中
nodev   pstore
nodev   mqueue
    ext4                #使用中
nodev   vmhgfs
nodev   fuse
    fuseblk             #使用中
nodev   fusectl
nodev   autofs

mdstat

 

查看 raid 设备信息 这个文件包含了由 md 设备驱动程序控制的 RAID 设备信息

# cat /proc/mdstat
Personalities (个性):  
unused devices: <none>  

modules

lsmod就是从这里读取数据的 ,查看当前内核加载了哪些动态模块:
[root@local ~]# cat /proc/modules
nfs 228929 13 - Live 0xf929e000 ----------------------- 模块名,占用内存,加载次数,是否可用,起始地址?

mounts

# cat /proc/mounts
这个文件以/etc/mtab文件的格式给出当前系统所安装的文件系统信息。这个文件也能反映出任何手工安装从而在/etc/mtab文件中没有包含的文件系统。
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=491832k,nr_inodes=122958,mode=755 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
/dev/sda2 / ext4 rw,relatime,barrier=1,data=ordered 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,relatime,barrier=1,data=ordered 0 0
/dev/sr0 /media iso9660 ro,relatime 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
vmware-vmblock /var/run/vmblock-fuse fuse.vmware-vmblock rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other 0 0
/etc/auto.misc /misc autofs rw,relatime,fd=7,pgrp=2121,timeout=300,minproto=5,maxproto=5,indirect 0 0
-hosts /net autofs rw,relatime,fd=13,pgrp=2121,timeout=300,minproto=5,maxproto=5,indirect 0 0
gvfs-fuse-daemon /root/.gvfs fuse.gvfs-fuse-daemon rw,nosuid,nodev,relatime,user_id=0,group_id=0 0 0

partitions

分区表信息

 cat /proc/partitions
major minor  #blocks  name
 
   8        0   20971520 sda
   8        1     204800 sda1
   8        2   10485760 sda2
   8        3    1048576 sda3

进程ID

ls /proc/
目录下还有很多数字命名的目录,这些都是进程的ID
1     1926  22    2566  27    2784  286   35   52   76           filesystems  mtrr
10    1941  2280  257   270   2785  2860  36   53   77           fs           net
1035  1952  23    258   271   2788  2882  37   54   78           interrupts   pagetypeinfo
1036  1957  2360  259   272   279   2885  38   55   8            iomem        partitions
1083  196   2366  26    2726  2791  29    381  56   80           ioports      sched_debug
可以通过进程的ID查到程序的运行绝对路径
[root@local ~]# ll /proc/2885/exe
lrwxrwxrwx 1 root root 0 Dec 28 11:25 /proc/2885/exe -> /usr/libexec/pulse/gconf-helper

进程

进程的筛选有助于我们了解系统当前的运行状态,以及在后期调优的时候对目前的状态做一个参照数值!

进程列表ps命令

ps 命令:只对具体进程进行观测:# ps -aux

5 个主要进程状态:

    S  --> 睡眠   

    R  --> 正在运行或准备运行   

    Z  --> 僵尸进程

D  --> 不可中断的睡眠进程   

T  --> 停止或者被追踪的进程

    L  --> (内存锁,防止交换--解决 swap 信息泄漏,锁住内存,防止交换)

        s  -->  session  header  父子/父子   ----> 父迚程,引导进程

        +  --> 前台进程组  表示是一组进程,而不是一个进程

        l  -->  进程,线程

        <  -->  高优先级进程  

        N  -->  低优先级进程

按内存对进程排序

# ps -aux --sort -rss //去掉-rss是升序
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       2475  1.2  3.8 169112 38184 tty1     Ss+  11:08   0:16 /usr/bin/Xorg :0 -nr -verbose -
root       2764  0.2  2.2 538540 22436 ?        S    11:10   0:03 nautilus
root       3013  0.0  2.1 402184 21956 ?        S    11:10   0:00 /usr/bin/gnote --panel-applet -
root       2882  0.0  1.9 324388 19724 ?        S    11:10   0:00 python /usr/share/system-config
root       2791  0.2  1.7 307692 18060 ?        S    11:10   0:03 /usr/lib/vmware-tools/sbin64/vm
root       3017  0.0  1.6 466092 16864 ?        S    11:10   0:00 /usr/libexec/clock-applet --oaf

ac45f70565dba649fd72e71885ab3c33c4f.jpg

# ps -aux --sort rss //升序
ps -aux --sort -pcpu //按CPU降序,去掉-号为升序
man ps //排序条件帮助
       KEY   LONG         DESCRIPTION
       c     cmd          simple name of executable
       C     pcpu         cpu utilization
       f     flags        flags as in long format F field
       g     pgrp         process group ID
       G     tpgid        controlling tty process group ID
       j     cutime       cumulative user time
       J     cstime       cumulative system time
       k     utime        user time
       m     min_flt      number of minor page faults
       M     maj_flt      number of major page faults
       n     cmin_flt     cumulative minor page faults
       N     cmaj_flt     cumulative major page faults
       o     session      session ID
       p     pid          process ID
       P     ppid         parent process ID
       r     rss          resident set size
       R     resident     resident pages
       s     size         memory size in kilobytes
       S     share        amount of shared pages
       t     tty          the device number of the controlling tty
       T     start_time   time process was started

top命令

找出占用CPU时间比较多的进程 (这个命令本身就很消耗CPU时间的)

top
top - 11:36:46 up 28 min,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 218 total,   1 running, 216 sleeping,   1 stopped,   0 zombie
Cpu(s):  0.9%us,  0.5%sy,  0.0%ni, 98.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004412k total,   564072k used,   440340k free,    28580k buffers
Swap:  1048568k total,        0k used,  1048568k free,   270772k cached
 
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                            
  2475 root      20   0  197m  37m 8968 S  4.3  3.8   0:22.77 Xorg                               
  3052 root      20   0  290m  14m  10m S  2.0  1.5   0:09.91 gnome-terminal                     
  2750 root      20   0  429m  14m  10m S  0.7  1.4   0:01.15 metacity                           
    21 root      20   0     0    0    0 S  0.3  0.0   0:01.45 events/2     
0.0%us:用户态  
0.0%sy:内核态
0.0%ni:优先级切换
97.6%id:CPU 空闲
2.3%wa:等待,IO 输入输出等待
0.0%hi:硬中断
0.1%si:软中断
0.0%st:CPU 偷窃时间。  如开启虚拟机会出现这种情况
TOP命令的排序:M内存排序,Pcup排序,<>前后翻页查看进程
 

动态查看进程

# find / 
另开一个终端执行
# vim a.txt 
再开一个终端执行
# ps -aux | grep find 
//拿到PID
# ps -aux | grep a.txt 
//拿到PID
# top -p 3284,3259 
//动态查看,-p=pid
top - 11:47:16 up 39 min,  4 users,  load average: 0.09, 0.07, 0.02
Tasks:   2 total,   0 running,   2 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.9%us,  5.6%sy,  0.0%ni, 88.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004412k total,   698264k used,   306148k free,    99668k buffers
Swap:  1048568k total,        0k used,  1048568k free,   273068k cached
 
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND         
  3284 root      20   0  109m 1296  936 S 12.3  0.1   0:01.90 find        
  3259 root      20   0  140m 3940 2652 S  0.0  0.4   0:00.43 vim          

a6442ae69e73f0fdf35dcb874eb56cda0e5.jpg

1: 10:53:29表示系统给当前时间,up 7 min表示系统运行了多长时间了(分)
2: 当前系统登录的用户数
3: 系统负载平均值,三个值分别为1,5,15分钟的平均值(除于CPU个数不大于1就没有什么影响)
4:多少个任务在运行,总共多少个进程
5:正在运行的进程数
6:休眠的进程数
7:停止的进程数
8:僵尸进程
9:CPU给用户分配了多少
10:CPU给系统分配了多少,内核中的进程占用CPU的百分比
11:调优后进程所占有的CPU百分比
12:空闲进程百分比
21:等待 wait
18:硬中断
19:软中断
20:cpu偷窃占用
最后两行内容是:物理内存总共多少,用了多少,还剩多少,缓存多少
Swap总共多少,用了多少,还剩多少,缓存多少
Notes:top命令后,敲d可以更改刷新时间(默认3s刷新一次)
   空格键立即刷新
  m按内存排序
   p按CPU排序
   q退出
kill 控制进程常见信号
HUP 重新加载配置文件,类似重启,立即应用新的配置文件  1
INT 和CTRL+C,用于通知前台进程组终止进程   2
Kill 强行中断   9
Stop 和Ctrl+Z   19
Eg: #kill -9 7678
#killall httpd 与 #pkill httpd   直接杀死httpd相关所有进程
#pidof httpd 查询进程状态和查询进程的pid

mpstat命令

这个命令需要安装,由软件包sysstaat提供

# rpm -ivh /media/RHEL_6.5\ x86_64\ Disc\ 1/Packages/sysstat-9.0.4-22.el6.x86_64.rpm 
//此软件包,包括很多查看系统状态的软件包
mpstat //所有CPU综合信息
Linux 2.6.32-431.el6.x86_64 (xuegod63.cn)   12/28/2015  _x86_64_    (4 CPU)
 
11…… AM CPU   %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
11…… AM all   0.35    0.00    0.55    0.64    0.00    0.03    0.00    0.00   98.44
%user     表示处理用户进程所使用 CPU 的百分比。用户进程是用于应用程序(如 Oracle 数据库)的非内核进程。  
%nice     表示使用 nice 命令对进程进行降级时 CPU 的百分比。在之前的部分中已经对 nice 命令进行了介绍。简单来说,nice 命令更改进程的优先级。  
%sys      表示内核进程使用的 CPU 百分比  
%iowait   表示等待进行 I/O 所使用的 CPU 时间百分比  
%irq      表示用于处理系统中断的 CPU 百分比  
%soft     表示用于软件中断的 CPU 百分比  
%idle     显示 CPU 的空闲时间  
%intr/s   显示每秒 CPU 接收的中断总数  
[root@xuegod63 ~]# mpstat -P ALL //所有CPU运行状态
Linux 2.6.32-431.el6.x86_64 (xuegod63.cn)   12/28/2015  _x86_64_    (4 CPU)
 
11:57:50 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
11:57:50 AM  all    0.31    0.00    0.48    0.56    0.00    0.03    0.00    0.00   98.61
11:57:50 AM    0    0.74    0.00    1.00    1.72    0.01    0.02    0.00    0.00   96.51
11:57:50 AM    1    0.31    0.00    0.57    0.26    0.00    0.09    0.00    0.00   98.77
11:57:50 AM    2    0.13    0.00    0.27    0.16    0.00    0.01    0.00    0.00   99.44
11:57:50 AM    3    0.07    0.00    0.11    0.10    0.00    0.00    0.00    0.00   99.72
top //执行之后按数字键1 看到内容相似
top - 11:58:57 up 50 min,  4 users,  load average: 0.02, 0.01, 0.00
Tasks: 219 total,   1 running, 217 sleeping,   1 stopped,   0 zombie
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.0%us,100.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004412k total,   696616k used,   307796k free,    99912k buffers
mpstat -P ALL 1 100 //一秒钟刷新一次 连续刷新 100 次

内存运行状态相关工具

通用查询工具,内存信息查询工具

free命令

free -m //MB单位
            total       used       free     shared    buffers     cached
Mem:           980        880        100          0         87        508
-/+ buffers/cache:        285        695
Swap:         1023          0       1023
buffers #内存从磁盘读出的内容
cached #内存需要写入磁盘的内容
当物理内存不够用的时候,内核会把非活跃的数据清空。
sync 
//内存和硬盘数据同步

# echo 3 > /proc/sys/vm/drop_caches 清空缓存
执行find会发现buffers增加,dd if=/dev/zero of=a.txt bs=1M count=1024会有cached增加

meminfo文件

通过/proc/meminfo 文件夹,查看非活跃的内存: /proc 文件系统下的多种文件提供的系统信息不是针对某个特定经常的,而是能够在整个系统范围的上下文中使用。可以使用的文件随系统配置的变化而变。

# cat /proc/meminfo
MemTotal:        1004412 kB #总内存
MemFree:           75376 kB #空闲大小
Buffers:           21524 kB #用来给文件做缓冲大小
Cached:           621092 kB #被高速缓冲存储器使用大小
SwapCached:            8 kB #被高速缓冲存储器的交换空间大小
Active:            95520 kB #在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,活跃内存
Inactive:         709552 kB #在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,非活跃内存
Active(anon):      14960 kB #anon不久的意思,刚刚缓存的活跃内存
Inactive(anon):   152148 kB #刚刚缓存的不活跃内存
Active(file):      80560 kB #于文件相关的活跃内存
Inactive(file):   557404 kB #于文件相关的不活跃内存
Unevictable:           0 kB #等待物理内回收大小
Mlocked:               0 kB #被锁定的内存大小
SwapTotal:       1048568 kB #交换空间总大小
SwapFree:        1048560 kB #空闲交换空间
Dirty:                12 kB #等待被写回到磁盘的大小
Writeback:             0 kB #正在被写回的大小
AnonPages:        162464 kB #未映射的页的大小
Mapped:            64628 kB #设备和文件映射的大小
Shmem:              4636 kB #共享内存大小
Slab:              72996 kB #内核数据结构缓存的大小,可减少申请和释放内存带来的消耗
SReclaimable:      38920 kB #可收回slab的大小
SUnreclaim:        34076 kB #不可收回的slab的大小
KernelStack:        2520 kB #内核调试内存大小
PageTables:        18528 kB #管理内存分页的索引表的大小
NFS_Unstable:          0 kB #不稳定页表的大小
……
VmallocTotal:   34359738367 kB  #虚拟内存大小
VmallocUsed:      153316 kB     #已经被使用的虚拟内存大小
VmallocChunk:   34359578676 kB
HardwareCorrupted:     0 kB
AnonHugePages:     34816 kB
HugePages_Total:       0        #//大页面的分配
HugePages_Free:        0
……
注:当内存不够用时,kernel总是把不活跃的内存交换到swap空间。如果inactive内存多时,加swap空间可以解决问题,而active多,则考虑加内存。

vmstat命令

命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,MEM内存使用,VMSwap虚拟内存交换情况,IO读写情况。

使用vmstat可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率。  比top命令节省资源。

注:当机器运行比较慢时,建议大家使用vmstat查看运行状态,不需要使用top,因top使用资源比较多

vmstat
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      8  61632  24060 619856    0    0    28    42   47   52  0  0 99  1  0    
r 运行状态的进程个数 。展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。
b 不可中断睡眠 正在进行i/o等待--阻塞状态的进程个数  进程读取外设上的数据,等待时
free   剩余内存,D位是KB
buffers #内存从磁盘读出的内容
cached #内存需要写入磁盘的内容
si  swapin   swap换入到内存
so swapout  内存换出到swap   换出的越多,内存越不够用
bi  blockin 从硬盘往内存读。 D位是块。   把磁盘中的数据读入内存
bo blockout 从内存拿出到硬盘 (周期性的有值) 写到硬盘
注:#判断是读多还是写多,是否有i/o瓶颈
in 系统的中断次数,cpu调度的次数多
cs 每秒的上下文切换速度
注:如果这个数据比较大,说明有大并发的进程或线程在运行。 这种情况下,一般会用大理网络访问请求。
Us 用户进程执行消耗cpu时间(user time) us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了
Sy 系统进程消耗cpu时间(system time) sys的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,我们应该检查原因。
Id 空闲时间(包括IO等待时间)  
wa 等待IO时间 Wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。

类别

项目

含义

说明

Procs(进程)

r

等待执行的任务数

展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。

B

等待IO的进程数量

 

Memory(内存)

swpd

正在使用虚拟的内存大小,D位k

 

free

空闲内存大小

 

buff

已用的buff大小,对块设备的读写进行缓冲

 

cache

已用的cache大小,文件系统的cache

 

inact

非活跃内存大小,即被标明可回收的内存,区别于free和active

具体含义见:概念补充(当使用-a选项时显示)

active

活跃的内存大小

具体含义见:概念补充(当使用-a选项时显示)

Swap

si

每秒从交换区写入内存的大小(D位:kb/s)

 

so

每秒从内存写到交换区的大小

 

IO

bi

每秒读取的块数(读磁盘)

现在的Linux版本块的大小为1024bytes

bo

每秒写入的块数(写磁盘)

 

system

in

每秒中断数,包括时钟中断

这两个值越大,会看到由内核消耗的cpu时间会越多

cs

每秒上下文切换数

CPU(以百分比表示)

Us

用户进程执行消耗cpu时间(user time)

us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了

Sy

系统进程消耗cpu时间(system time)

sys的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,我们应该检查原因。

Id

空闲时间(包括IO等待时间)

 

wa

等待IO时间

Wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。

vmstat 1 20 
//每1s更新一次,更新20次

 

转载于:https://my.oschina.net/54188zz/blog/3016684

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值