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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。