首页 > 代码库 > linux服务器性能分析与优化

linux服务器性能分析与优化

#1 查看硬件产品名称
dmidecode |grep ‘Product Name‘

#2 查看主板序列号
dmidecode |grep -i ‘serial number‘ |grep CN

#3 查看CPU型号
grep name /proc/cpuinfo

#4 查看CPU个(核)数:
grep ‘physical id‘ /proc/cpuinfo

#5 查看cpu使用情况
top

#6 查看内存信息
grep MemTotal /proc/meminfo
free -m
vmstat

#7 查看分区大小情况
fdisk -l

#8 查看分区使用情况
df -h
 
#9 查看内核版本
cat /etc/redhat-release
cat /etc/issue
uname -rm

#10 查看系统启动信息
dmesg |grep sda

#11 查看各个设备中断请求(IRQ)
cat /proc/interrupts

#12 查看磁盘阵列级别

####################### 怎么找到性能瓶颈
操作系统完成一个任务是与系统自身设置、网络拓扑结构、路由设备、路由策略、
接入设备、物理线路等多个方面密切相关,当linux出现问题时,我们应当从
应用程序、操作系统、服务器硬件、网络环境综合排查,定位问题,然后解决。

<1> 操作系统当前运行状态: 系统负载、内存状态、进程状态、cpu负荷、
<2> 系统硬件信息: 磁盘IO、CUP型号、内存大小、网卡带宽
<3> 应用程序对系统资源的使用情况(DB/BUG/内存溢出)
<4> 接口程序的执行效率、慢查询语句、SQL优化、代码执行效率低.
例如问题:
CPU资源过度使用会造成系统中出现大量等待进程,导致应用程序响应缓慢.
进程大量增加会导致系统内存资源增加
物理内存耗尽,系统会使用虚拟内存,虚拟内存的使用会造成磁盘IO的增加并加大
CPU的开销。

解决问题遵循的流程:
   查看系统系统硬件、网络设备、操作系统配置、应用程序架构和程序代码

CPU瓶颈:应用邮件服务器、动态WEB服务器(CPU配置和性能)
         方案:运行SMP内核支持超线程,CPU数量越多,超线程性能提高越少,
              两个4核的CPU性能比8个单核的CPU性能低25%-30%

内存瓶颈: 打印服务器、数据库服务器、静态web服务器.(加大内存大小)
          方案:64位,开启linux大内存内核支持

磁盘IO瓶颈:raid0(不安全、至少2盘) raid1(安全 磁盘镜像 利用率50%)
            raid5(奇偶效应) raid10(至少4块盘)
           方案: 根据业务选择合适的raid级别
                raid0: 对读写操作频繁并对数据安全性要求不高的应用
                raid1: 对读写没特殊要求,对数据安全要求较高的应用
                raid5: 对读要求高,对写要求不高,并保证数据安全的应用
                raid10: 对读写要求都很高,对数据安全性要求也高的应用

系统性能标准表:
             好               坏                         糟糕
CPU       user%+sys%<70%     user%+sys%=85%          user%+sys%>=90%      

内存      Swap In (si) =0    Per CPU with 0 page/s   More Swap In & Swap Out
          Swap Out (so)=0    

磁盘      iowait%<20%        iowait%=35%             iowait%>=50%

其中:  
    user%  表示CPU处于用户模式下时间百分比
    sys%   表示CPU处于系统模式下时间百分比
    iowait%表示CPU等待输入输出完成时间的百分比
    Swap In即 si 表示虚拟内存的页导入,从swap disk交换到ram
    Swap Out即 so 表示虚拟内存的页导出,从ram 交换到swap disk   

    

################---------------------- 性能分析工具

#1 vmstat
[root@home-mysql1 ~]# vmstat 3 5
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      0 895504  12540  49092    0    0     3     3 1003   21  0  0 100  0  0
 0  0      0 895504  12548  49084    0    0     0    19  978   21  0  1 99  0  0
 0  0      0 895504  12548  49092    0    0     0     0  986   21  0  0 100  0  0
 0  0      0 895504  12548  49092    0    0     0     0  969   20  0  0 100  0  0

解释:
si 表示磁盘调入内存
so 表示内存调入磁盘
一般情况下si和so值都是0,如果长期不是,表示系统内存不足,需要增加系统内存.

bi 表示读磁盘(kb/s)
bo 表示写磁盘(kb/s)
bi+bo参考值100,如果超过1000,而且wa值较大 说明磁盘IO有问题.考虑磁盘读写性能

in 表示在某一时间间隔内观测到的每秒设备中断数
cs 表示上下文切换次数
in和cs 值越大,由内核消耗的CPU时间越多


us列显示用户进程消耗的CPU时间百分比,如果长期大于50%,就需要考虑优化程序或算法
sy列显示内核进程消耗的CPU时间百分比,sy值较高时,说明内核消耗的CPU资源很多。
us+sy参考值是80%,如果大于80%,说明可能存在CPU资源不足

id列显示了CPU处在空闲状态的时间百分比
wa列显示IO等待所占用的CPU时间百分比。
wa值越高,说明I/O等待越严重,根据经验,wa参考值是20%,超过说明I/O等待严重.
引起I/O等待原因可能是磁盘大量随机读写造成的,也可能是磁盘控制器的带宽瓶颈造成的.


#2 sar

#3 iostat

#4 free -m (以M为单位的使用情况)
[root@home-mysql1 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1000        127        873          0         12         47
-/+ buffers/cache:         66        934
Swap:         2047          0       2047

经验公式:
当应用程序可用内存/系统物理内存>70%时 表示系统内存资源严重不足,不影响系统性能。
当应用程序可用内存/系统物理内存<20%时 表示系统内存资源紧张,需要增加系统内存。
当20%< 应用程序可用内存/系统物理内存<70%时 表示系统内存资源基本满足应用需求,暂时不
影响系统性能.
不间断检测内存使用情况:free -b -s 5  

#5 uptime
[root@home-mysql1 ~]# uptime (1分钟 5分钟 15分钟)
 20:28:31 up 11:35,  1 user,  load average: 0.00, 0.00, 0.00
3个值大小不能大于系统CPU的个数,说明负载很高,可能影响系统性能,偶尔大于不担心,
如果出现值小于CPU个数,表示CPU有空闲时间片。

#6 netstat  显示本机网络链接、运行端口、路由表详情

netstat -a  显示本机所有连接和监听端口
netstat -n  显示当前建立的有效连接和端口
netstat -r  显示路由表信息
netstat -t  显示所有TCP连接
netstat -u  显示所有UTP连接
netstat -i  显示自动配置接口状态

[root@home-mysql1 ~]# netstat -i
Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500   0     3634      0      0      0     1950      0      0      0 BMRU
lo        16436   0      172      0      0      0      172      0      0      0 LRU
Iface         表示接口名称
MTU           表示最大传输单元 单位字节
RX-OK/TX-OK   表示已经准确无误的接收/发送了多少数据包
RX-ERR/TX-ERR 表示接收/发送数据包时产生了多少错误
RX-DRP/TX-DRP 表示接收/发送数据包时丢弃了多少数据包
RX-OVR/TX-OVR 表示由于误差而遗失了多少数据包
正常情况下  RX-ERR/TX-ERR RX-DRP/TX-DRP RX-OVR/TX-OVR 值应该为0
如果不是,网络质量肯定有问题(检测网卡设备)

#7 top
top - 22:36:51 up 13:43,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  57 total,   2 running,  55 sleeping,   0 stopped,   0 zombie
Cpu(s):  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:   1024932k total,   132320k used,   892612k free,    14056k buffers
Swap:  2096472k total,        0k used,  2096472k free,    49868k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                       

                                                                      
 3225 root      15   0 12632 1112  876 R  0.3  0.1   0:00.05 top                           

                                                                       
    1 root      18   0 10372  752  632 S  0.0  0.1   0:00.66 init                          
#8 Nginx php-cgi

开启10个Nginx进程消耗150MB内存(15MB*10=150MB)
开启64个php-cgi进程消耗120内存(20MB*64=1280MB)
加上系统自身消耗内存,总共消耗不到2G内存.

如果服务器内存较小,可以只开25个php-cgi进程  这样消耗php-cgi消耗总内存数才500MB
用Webbench做压力测试
同等硬件环境下,Nginx的处理能力相当于Apache的510倍。

本文出自 “技术屌丝” 博客,请务必保留此出处http://yeqing.blog.51cto.com/3159086/1597040

linux服务器性能分析与优化