如何使服务器性能优化?

运维 系统运维
笔者介绍了服务器性能优化配置的一些建议,其中包括服务配置建议、MySQL性能分析及建议、系统性能分析等内容。

服务器性能优化对于系统管理员来说至关重要。提高服务器运行速度,以及提高服务器的安全性能都是系统管理员所应做的工作。下面是服务器性能优化配置的建议,具体内容如下所述。

很久以前在前公司给中企动力那边写的服务器分析建议,其实就是一些简单参数调整仍后利用vmstat,top这些工具对系统性能做初步分析。

贴出来希望对朋友们学习有帮助,同时也欢迎朋友们补充![此文档仅作参考和学习,具体优化比较复杂欢迎朋友们探讨!]

一、服务器配置

先阅读apache配置优化建议如下,再对相关参数进行调整,观察服务器状况.

Apache配置优化建议:

进入/usr/local/apache2/conf/extra目录下

Apache优化,

经过上述操作后,Apache已经能够正常运行。但是,对于访问量稍大的站点,Apache的这些默认配置是无法满足需求的,我们仍需调整Apache的一些参数,使Apache能够在大访问量环境下发挥出更好的性能。以下我们对Apache配置文件httpd.conf中对性能影响较大的参数进行一些说明。

(1)Timeout该参数指定Apache在接收请求或发送所请求内容之前的最长等待时间(秒),若超过该时间Apache则放弃处理该请求,并释放连接。该参数默认值为120,推荐设置为60,对于访问量较大的网站可以设置为30或15。

(2)KeepAlive该参数控制Apache是否允许在一个连接中有多个请求,默认打开。但对于大多数论坛类型站点来说,通常设置为off以关闭该支持。

(3)MPM-prefork.c在默认情况下Apache使用Prefork(进程)工作模式,可以说这部分的参数设置是对Apache性能影响的核心和关键。用户可以在配置文档中找到以下配置段:

  1. StartServers5  
  2.  
  3. MinSpareServers5  
  4.  
  5. MaxSpareServers10  
  6.  
  7. MaxClients15  
  8.  
  9. MaxRequestsPerChild0   
  10.  

这就是控制Apache进程工作的配置段,为了更好的理解上述配置中的各项参数,下面让我们先了解一下Apache是如何控制进程工作的。

我们知道,在Unix系统中,很多服务(Service)的守护进程(Daemon)在启动时会创建一个进程以准备应答可能的连接请求,服务即进入了端口监听状态,当一个来自客户端(Client)的请求被发送至服务所监听的端口时,该服务进程即会处理该请求,在处理过程中,该进程处于独占状态,也就是说如果此时有其他请求到达,这些请求只能“排队”等待当前请求处理完成且服务进程释放。这样就会导致越来越多的请求处于队列等待状态,实际表现就是该服务处理能力非常低下。Apache使用Prefork模式很好的解决了这一问题。

下面我们来看看Apache实际上是如何高效率工作的。

当Apache启动时,Apache会启动StartSpareServers个空闲进程同时准备接收处理请求,当多个请求到来时,StarSpareServers进行会越来越少,当空闲进程减少到MinSpareServers个时,Apache为了能够继续有充裕的进程处理请求,它会再启动StartsServers个进程备用,这样就大大减少了请求队列等待的可能,使得服务效率提高,这也是为什么叫做Pre-fork的原因;

让我们继续跟踪Apache的工作,我们假设Apache已经启动了200个进程来处理请求,理论上来说,此时Apache一共有205个进程,而过了一段时间,假设有100个请求都得到了Apache的响应和处理,那么此时这100个进程就被释放成为空闲进程,那么此时Apache有105个空闲进程。而对于服务而言,启动太多的空闲进程时没有任何意义的,反而会降低服务器的整体性能,那么Apache真的会有105个空闲进程么?

当然不会!实际上Apache随时在检查自己,当发现有超过MaxSpareServers个空闲进程时,则会自动停止关闭一些进程,以保证空闲进程不过过多。说到这里,用户应该对Apache的工作方式有了一定的了解,如果想获得更多更详细的说明请参阅Apache手册文档。

我们还有两个参数没有介绍:MaxClients和MaxRequestPerchild;

MaxClients指定Apache在同一时间内最多允许有多少客户端能够与其连接,如果超过MaxClients个连接,客户端将会得到一个“服务器繁忙”的错误页面。我们看到默认情况下MaxClients设置为15,这对一些中型站点和大型站点显然是远远不够的!也许您需要同时允许512个客户端连接才能满足应用需求,好吧,那么就让我们把MaxClients修改为512,保存httpd.conf并退出,重启Apache,很遗憾,在重启过程当中您看到了一些错误提示,Apache重启失败。错误提示中告诉您MaxClients***只能设定为256,相信您一定很失望。不过不要沮丧,Apache作为世界***的WebServer一定不会如此单薄的!在默认情况下,MaxClients的确只能设定为不超过256的整数,但是,如果您有需要完全可以随意定制,此时就需要使用ServerLimit参数来配合使用,简单的说ServerLimit就像是水桶,而MaxClients就像是水,您可以通过更换更大的水桶(将ServerLimit设定为一个较大值)来容纳更多的水(MaxClients),但要注意,MaxClients的设定数值是不能大于ServerLimit的设定数值的!

注:MaxClents

下面让我们了解一下MaxRequestPerChild参数,该参数指定一个连接进程中可以有多少个线程同时工作。也许这样解释过于专业,那么您只要想想“网络蚂蚁”、“网际快车FlashGet”中的“多点同时下载”即可,该参数实际上就是限制最多可以用几个“点”。默认设置为0,即为:不限制。但需要注意,如果将该值设置的过小会引起访问问题,如果没有特殊需要或者访问量压力并非很大可以保持默认值,如果访问量很大则推荐设置为2048。

好了,解释了这么多,让我们看看经过修改后Perfork.c配置段的推荐配置:

  1. StartServers5  
  2.  
  3. MinSpareServers5  
  4.  
  5. MaxSpareServers10  
  6.  
  7. ServerLimit1024  
  8.  
  9. MaxClients768  
  10.  
  11. MaxRequestsPerChild0  
  12.  

完成了上述对Apache的调整,Apache已经获得了较大的性能改善。

#p#

二、MySQL优化建议及分析

MySQL优化步骤:

1、看机器配置,指三大件:cpu、内存、磁盘(I/O)

2、看mysql配置参数

3、查系mysql行状态,可以用mysqlreport工具来查看

4、查看mysql的慢查询

依次解决了以上问题之后,再来查找程序方面的问题

MySQL优化具体方法及建议

1.以root数据库服务器,先查看相关日志,看看有什么异常tail?n100xxx.erro

2.以root身份登陆MySQL数据库,

Mysql?uroot?p

showprocesslist;

3.使用showstatus命令

mysql会给出一个很长的列表

官方说明在http://www.mysql.com/doc/e...

含义如下:

aborted_clients客户端非法中断连接次数

aborted_connects连接mysql失败次数

com_xxxxxx命令执行次数,有很多条

connections连接mysql的数量

Created_tmp_disk_tables在磁盘上创建的临时表

Created_tmp_tables在内存里创建的临时表

Created_tmp_files临时文件数

Key_read_requestsThenumberofrequeststoreadakeyblockfromthecache

Key_readsThenumberofphysicalreadsofakeyblockfromdisk

Max_used_connections同时使用的连接数

Open_tables开放的表

Open_files开放的文件

Opened_tables打开的表

Questions提交到server的查询数

Sort_merge_passes如果这个值很大,应该增加my.cnf中的sort_buffer值

Uptime服务器已经工作的秒数

提升性能的建议:

1.如果opened_tables太大,应该把my.cnf中的table_cache变大

2.如果Key_reads太大,则应该把my.cnf中key_buffer_size变大.可以用Key_reads/Key_read_requests计算出cache失败率

3.如果Handler_read_rnd太大,则你写的SQL语句里很多查询都是要扫描整个表,而没有发挥索引的键的作用

4.如果Threads_created太大,就要增加my.cnf中thread_cache_size的值.可以用Threads_created/Connections计算cache命中率

5.如果Created_tmp_disk_tables太大,就要增加my.cnf中tmp_table_size的值,用基于内存的临时表代替基于磁盘的

注:所以配置参数可以修改/etc/my.cnf此文件.

具体更深入的mysql优化请见本版相关贴

三、系统负载及性能分析方法及工具介绍

vmstat

Procs

-r:

运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)

-b:

处于不可中断状态的进程数,常见的情况是由IO引起的

Memory

-swpd:切换到交换内存上的内存(默认以KB为单位)

如果swpd的值不为0,或者还比较大,比如超过100M了,但是si,so的值长期为0,这种情况我们可以不用担心,不会影响系统性能。

-free:空闲的物理内存

-buff:作为buffercache的内存,对块设备的读写进行缓冲

-cache:作为pagecache的内存,文件系统的cache

如果cache的值大的时候,说明cache住的文件数多,如果频繁访问到的文件都能被cache住,那么磁盘的读IObi会非常小。

Swap

-si:交换内存使用,由磁盘调入内存

-so:交换内存使用,由内存调入磁盘

内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。

我发现有些朋友看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点的,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

Io

-bi:从块设备读入的数据总量(读磁盘)(KB/s),

-bo:写入到块设备的数据总理(写磁盘)(KB/s)

随机磁盘读写的时候,这2个值越大(如超出1M),能看到CPU在IO等待的值也会越大

System

-in:每秒产生的中断次数

-cs:每秒产生的上下文切换次数

上面这2个值越大,会看到由内核消耗的CPU时间会越多

Cpu

-us:用户进程消耗的CPU时间百分比

us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或者进行加速了(比如PHP/Perl)

-sy:内核进程消耗的CPU时间百分比

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

-wa:IO等待消耗的CPU时间百分比

wa的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。

-id:CPU处在空闲状态时间百分比

情景分析

这个vmstat的输出那些信息值得关注?

-Procsr:运行的进程比较多,系统很繁忙

-Iobo:磁盘写的数据量稍大,如果是大文件的写,10M以内基本不用担心,如果是小文件写2M以内基本正常

Cpuus:持续大于50,服务高峰期可以接受

Cpuwa:稍微有些高

Cpuid:持续小于50,服务高峰期可以接受

Top性能分析介绍

这个命令可以查看系统中运行的进程的状况,CPU使用状况,系统负载,内存使用等。它是检查系统进程运行状况最方便的工具了,它默认显示部分活动的进程,并且按照进程使用CPU的多少排序。它可以显示全部CPU的使用状况,也可以显示每个进程都运行在那个CPU上面。

我习惯使用这个命令查看那些进程或者那类进程占用CPU和内存资源最多,以此迅速定位存在性能问题的进程,以及运行异常的进程。

用top看到的内存的说明(Mem的第2行)

-actv

active活跃的内存页,正在映射给进程使用

-in_d

inactive_dirty非活跃的内存页,并且内存数据被修改,需要写回磁盘

-in_c

inactive_clean非活跃的内存页,干净的数据,可以被重新分配使用

问题?

in_d和in_c以及cache,buffer的内存有何不同?

我的理解:

actv,in_d,in_c是VM中对内存的管理组织形式,buffer是块设备读写缓冲,cache是文件系统缓存

top工具介绍:

用top看到的进程所处的几种状态(STAT列)。

-D不可中断休眠,通常是IO操作所处的状态

-R正在执行的或者处在等待执行的进程队列中

-S休眠中

-T暂停刮起的(比如Ctrl+Z),也可能是被strace命令调用中的状态

-Z僵尸进程,进程执行完成,但由于其父进程没有销毁该进程,而被init进程接管进行销毁。

-W没有使用物理内存,所占用的物理内存被切换到交换内存

<高优先级的进程

-N低优先级

有时候一个进程会有多个状态的标志,比如SWN,SW。

希望本文介绍的服务器性能优化配置的相关建议能够对读者有所帮助。

【编辑推荐】

  1. 提升服务器稳定性的四把利剑
  2. Exchange服务器快速恢复的步骤
  3. 你的Windows服务器是否得到了适当保护
  4. 利用WindowsServerBackup备份服务器很重要
  5. 搞定服务器备份:WindowsServerBackup工具
责任编辑:韩亚珊 来源: 博客转载
相关推荐

2022-09-26 09:19:38

服务器优化

2009-01-08 17:43:17

服务器性能磁盘

2022-02-16 14:10:51

服务器性能优化Linux

2021-11-29 11:13:45

服务器网络性能

2022-05-05 09:27:31

Linux服务器优化

2011-03-11 15:52:59

LAMP优化

2013-05-02 09:31:02

虚拟化服务器

2023-07-04 07:19:17

物理服务器网络

2013-07-23 09:51:32

Tomcat性能优化服务器性能优化

2010-05-19 10:31:07

IIS服务器

2021-01-13 05:27:02

服务器性能高并发

2009-08-11 08:38:15

Linux服务器硬盘性能实用技巧

2011-03-11 15:53:02

LAMP优化

2018-06-13 10:27:04

服务器性能优化

2019-08-12 14:46:56

Web服务器性能

2022-10-10 12:31:37

服务器性能

2012-01-18 11:25:36

服务器优化

2011-03-11 15:52:57

LAMP优化

2009-02-09 18:02:00

2012-02-07 10:25:50

点赞
收藏

51CTO技术栈公众号