Linux服务器性能分析与优化

时间:2023-03-09 05:21:32
Linux服务器性能分析与优化

影响服务器性能的因素:

CPU :大部分cpu在同一时间只能运行一个线程,超线程的处理器可以在同一时间处理多个线程,因此可以利用超线程特性提高系统性能。

在linux系统下,只有运行SMP内核才能支持超线程,但是安装的CPU数量越多,从超线程获得的性能提升越少。

linux内核会将多核的处理器当个多个单独的CPU来识别。例如,2个4核的cpu会被当做8个单个的cpu,从性能角度来讲,两个4核的cpu整体要比8个单核cpu低25%-30%。

可能出现瓶颈的应用有:邮件服务器,动态web服务器等。

内存 :内存太小,系统进程会被阻塞,应用也会变得缓慢,甚至失去响应,内存太大导致浪费。

虚拟内存可以缓解物理内存的不足,但是虚拟内存的过多占用会导致应用程序的性能明显下降。

在一个32位处理器的linux系统中超过8GB的物理内存都将被浪费,因此要使用更大的内存,建议安装64位的操作系统,同时开启linux的大内存内核支持。

由于处理器寻址范围的限制,在32位linux操作系统上,应用程序单个进程最大只能使用2GB的内存。

可能出现的内存瓶颈有:数据库服务器、静态web网站

磁盘I/O性能

网络带宽

性能分析工具

1、系统整体性能评估(uptime命令)

[root@web1 ~]# uptime

16:38:00  up 118 days,3:01, 5 users,  load average: 1.22, 1.02, 0.91

当前时间 04:03:58    系统已运行时间   当前在线用户    平均负载     最近1 分钟  5分钟   15分钟

注意:load average  输出的这三个值不等大于系统cpu的个数,本输出中系统有8个CPU,如果load average的三个值长期大于8时,说明CPU很繁忙,负载很高,可能会影响系统性能。小于时则相反,有空余的时间片。

2、CPU性能评估

2.1、利用vmstat命令监控系统cpu

[root@pc2 local]# vmstat  2  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   1504  62092 161848 409792    0    0     7     6   38   75  0  0 100  0  0

1  0   1504  62084 161848 409792    0    0     0     0  138  517  3  1 97  0  0

0  0   1504  62084 161856 409792    0    0     0     6   90  255  2  1 97  0  0

r :表示运行队列(多少个进程分配到cpu),当这个值超过了cpu数目,就会出现cpu瓶颈

b :堵塞的进程(等待资源的进程数,比如等待I/O,内存交换)

swpd :虚拟内存已使用的大小,若大于零,若大于0则表示你内存不足。

free :空闲的物理内存大小,这个值除以1024得出来的值为m

buff :linux系统中权限、目录里有什么内容、存储等的缓存。

cache :直接用来记忆我们打开的文件,给文件做缓冲。

si  :每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了

so :每秒虚拟内存写入磁盘的大小,若大于0,同上。

bi :块设备每秒接收的块数量

bo :块设备每秒发送的块数量

in :每秒cpu的中断次数

cs :是CPU每秒发生的上下文切换次数

us :是用户进程消耗CPU时间的百分比。如果长期大于50%,就需要考虑优化程序或算法

sy :显示了内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。

id :空闲cpu时间

wt :等待IO CPU时间。

注意:us+sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU资源不足。

一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足。需要增加系统内存。

swpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况下一般不用担心,不会影响系统性能

2.2、利用sar命令监控系统cpu

sar  选项  [-o file]  采样间隔  采样次数

-A : 所有报告的总和

-o file 命令结果将以二进制文件格式存放至文件中

-u :输出cpu使用情况的统计信息

-a :文件读写情况

-c :输出进程统计信息

-R :输出内存页面统计信息

-y :终端设备活动情况

-r :输出内存和交换空间的统计信息

[root@pc2 local]# sar   -u  3  3   #

Linux 2.6.32-642.3.1.el6.i686 (pc2)         2016年09月21日         _i686_        (1 CPU)

22时15分21秒     CPU     %user     %nice   %system   %iowait    %steal     %idle

22时15分24秒     all      1.03      0.00      0.34      0.00      0.00     98.63

22时15分27秒     all      0.33      0.00      0.33      0.00      0.00     99.33

22时15分30秒     all      0.34      0.00      0.00      0.00      0.00     99.66

平均时间:          all      0.56      0.00      0.22      0.00      0.00     99.21

%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。

%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。

%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。

%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。

%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。

%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。

注意:若 %iowait 的值过高,表示硬盘存在I/O瓶颈,若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量,若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU

3、内存性能评估

3.1、利用free指令监控内存

[root@pc2 local]# free -m    #以m为单位

total        used       free       shared    buffers     cached

Mem:           1006        947         58          5        158        400

-/+ buffers/cache : 387          618

Swap:           2015          1       2014

total :内存总数

used :已经使用的内存数

free  :空闲的内存数

shared:多个进程共享的内存总额

shared 、buffers 、cached:磁盘缓存的大小

-/+ buffers/cache:  (已用的内存数),公式:used-buffers-cached(得出的结果除以1021,结果的单位就为m)

-/+ buffers/cache:  (可用的内存数),公式:free+buffers+cached

注意:我们在观察 linux系统的内存使用情况时! 只要没发现用 linux系统的交换空间! 就不用担心自己的内存太小" 如果常常看到swap空间用

了很多! 你可能就要考虑增加物理内存了" 这也是在linux服务器上看内存是否够用的标准"

4、磁盘I/O性能评估(df)

4.1、利用iostat评估磁盘性能

[root@pc2 local]# iostat -d

Linux 2.6.32-642.3.1.el6.i686 (pc2)         2016年09月21日         _i686_        (1 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda               0.57        13.93        11.28    3727540    3016812

tps:该设备每秒的传输次数

Blk_read/s表示每秒读取的数据块数。

Blk_wrtn/s表示每秒写入的数据块数。

Blk_read表示读取的所有块数。

Blk_wrtn表示写入的所有块数。

注意! 如果Blk_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果Blk_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。

4.2、利用sar  -d 评估磁盘性能

[root@pc2 local]# sar -d 2 3

Linux 2.6.32-642.3.1.el6.i686 (pc2)         2016年09月21日         _i686_        (1 CPU)

22时47分31秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util

22时47分33秒    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

await表示平均每次设备I/O操作的等待时间(以毫秒为单位)。

svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位)。

%util表示一秒中有百分之几的时间用于I/O操作。

5、网络性能评估

(1)通过ping命令检测网络的连通性

(2)通过netstat –i组合检测网络接口状况

(3)通过netstat –r组合检测系统的路由表信息

(4)通过sar –n组合显示系统的网络运行状态  sar -n DEV 5 3

6、shell分析nginx日志

分析日志中的UserAgent

cat access_20130704.log | awk -F "\"" '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20

分析日志中那些IP访问最多

cat access_20130704.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20

分析日志中那些Url请求访问次数最多

cat access_20130704.log | awk -F "\"" '{print $(NF-5)}' | sort | uniq -c | sort -nr | head -20

7、图形化检测工具

dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品

安装方法

1. 在centos下 可以 yum -y instatll dstat

2. 下载rpm包进行安装

wget http://packages.sw.be/dstat/dstat-0.7.2-1.el5.rfx.noarch.rpm

rpm -ivh dstat-0.7.2-1.el5.rfx.noarch.rpm