设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站将关闭,不再开放。由于PC时代已远逝 。在这个后移动互联网时代,我们继续携手前行,保持对技术的热情。共同构建linuxtone知识星球欢迎加入,一起讨论技术、招聘人才、分享资源。请新老linuxtone人 扫码移步到 知识星球:linuxtone

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 41647|回复: 46

[Web Performance] 服务器性能优化配置建议   [复制链接]

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

签到
475
注册时间
2008-5-19
最后登录
2019-11-16
在线时间
1946 小时
阅读权限
200
积分
59409
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2008-5-25 23:12:23 |显示全部楼层
目 录
一、服务配置建议
二、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.    <IfModule prefork.c>
  2.        StartServers         5
  3.        MinSpareServers      5
  4.        MaxSpareServers     10
  5.        MaxClients          15
  6.        MaxRequestsPerChild  0
  7.    </IfModule>
复制代码
这就是控制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作为世界一流的Web Server一定不会如此单薄的!在默认情况下,MaxClients的确只能设定为不超过256的整数,但是,如果您有需要完全可以随意定制,此时就需要使用ServerLimit参数来配合使用,简单的说ServerLimit就像是水桶,而MaxClients就像是水,您可以通过更换更大的水桶(将ServerLimit设定为一个较大值)来容纳更多的水(MaxClients),但要注意,MaxClients的设定数值是不能大于ServerLimit的设定数值的!

注:MaxClents < ServerLimit

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

好了,解释了这么多,让我们看看经过修改后Perfork.c配置段的推荐配置:
  1.    <IfModule prefork.c>
  2.        StartServers         5
  3.        MinSpareServers      5
  4.        MaxSpareServers     10
  5.        ServerLimit       1024
  6.        MaxClients        768
  7.        MaxRequestsPerChild  0
  8.    </IfModule>
复制代码
完成了上述对Apache的调整,Apache已经获得了较大的性能改善。


二、MySQL优化建议及分析

MySQL优化步骤:
1、看机器配置,指三大件:cpu、内存、磁盘(I/O)
2、看mysql配置参数
3、查系mysql行状态,可以用mysqlreport工具来查看
4、查看mysql的慢查询
依次解决了以上问题之后,再来查找程序方面的问题

MySQL优化具体方法及建议
1. 以root数据库服务器,先查看相关日志,看看有什么异常tail ?n100 xxx.erro
2. 以root身份登陆MySQL数据库,
Mysql ?uroot ?p
 show processlist;

3.  使用show status命令
mysql会给出一个很长的列表
官方说明在http://www.mysql.com/doc/e...
含义如下:
aborted_clients 客户端非法中断连接次数
aborted_connects 连接mysql失败次数
com_xxx xxx命令执行次数,有很多条
connections 连接mysql的数量
Created_tmp_disk_tables 在磁盘上创建的临时表
Created_tmp_tables 在内存里创建的临时表
Created_tmp_files 临时文件数
Key_read_requests The number of requests to read a key block from the cache
Key_reads The number of physical reads of a key block from disk
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: 作为buffer cache的内存,对块设备的读写进行缓冲
-cache: 作为page cache的内存, 文件系统的cache
如果 cache 的值大的时候,说明cache住的文件数多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi 会非常小


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的输出那些信息值得关注?
-Procs r: 运行的进程比较多,系统很繁忙
-Io bo: 磁盘写的数据量稍大,如果是大文件的写,10M以内基本不用担心,如果是小文件写2M以内基本正常
Cpu us: 持续大于50,服务高峰期可以接受
Cpu wa: 稍微有些高
Cpu id:持续小于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 人评分积分 收起 理由
抚琴煮酒 + 24 真实用

总评分: 积分 + 24   查看全部评分

&amp;lt;-sina_sign,1762622645,2a5b1a59,10-&amp;gt;感谢大家对linuxtone的支持!&amp;lt;/strong&amp;gt;

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

注册时间
2008-5-19
最后登录
2019-11-16
在线时间
1946 小时
阅读权限
200
积分
59409
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2009-2-4 14:29:19 |显示全部楼层
老东西贴出来和朋友们分享一下!欢迎朋友们丰富此版块,重视性能分析!
&amp;lt;-sina_sign,1762622645,2a5b1a59,10-&amp;gt;感谢大家对linuxtone的支持!&amp;lt;/strong&amp;gt;

使用道具 举报

LT管理团队

向Linuxsir的哈密瓜大哥看齐 ...

Rank: 9Rank: 9Rank: 9

注册时间
2008-6-5
最后登录
2019-1-23
在线时间
1828 小时
阅读权限
200
积分
63902
帖子
715
主题
199
精华
4
UID
46

LT同学

发表于 2009-2-4 15:39:58 |显示全部楼层
老帖就是经验!收藏了!
哈密瓜!一个热爱linux的水果!
gtalk/msn:hamgua@gmail.com
sina微博:http://weibo.com/hamgua
LTmail:hamgua@linuxtone.org
是雄鹰就有展翅飞翔的时候,不是雄鹰要制造展翅飞翔的时候!

使用道具 举报

Rank: 6Rank: 6

注册时间
2008-12-11
最后登录
2015-6-24
在线时间
37 小时
阅读权限
70
积分
2838
帖子
59
主题
1
精华
0
UID
696
发表于 2009-2-12 12:55:13 |显示全部楼层
哈哈,收藏了,之前没在意过这些命令,没想到还有大用处

使用道具 举报

Rank: 4

注册时间
2009-2-27
最后登录
2013-4-23
在线时间
79 小时
阅读权限
50
积分
1035
帖子
57
主题
7
精华
0
UID
1630

LT粉丝

发表于 2009-3-22 16:12:47 |显示全部楼层
apache 1.x系列需要在编译之前在httpd.c设置ServerLimit,不然编译出来只能用到256,只有apache2才能在参数中调整

使用道具 举报

Rank: 1

注册时间
2009-1-13
最后登录
2011-8-18
在线时间
40 小时
阅读权限
1
积分
49
帖子
64
主题
3
精华
0
UID
829

LT粉丝

发表于 2009-3-28 11:35:38 |显示全部楼层
上面的是CUP还是CPU啊。

使用道具 举报

LT资深版主

醉了星星·醉月亮

Rank: 8Rank: 8

注册时间
2009-3-2
最后登录
2018-1-29
在线时间
331 小时
阅读权限
150
积分
10053
帖子
440
主题
59
精华
1
UID
1656

LT同学

发表于 2009-3-28 13:56:13 |显示全部楼层
上面的是CUP还是CPU啊。
新创意 发表于 2009-3-28 11:35


肯定是cpu撒,老cao手误,已改

使用道具 举报

LT资深版主

醉了星星·醉月亮

Rank: 8Rank: 8

注册时间
2009-3-2
最后登录
2018-1-29
在线时间
331 小时
阅读权限
150
积分
10053
帖子
440
主题
59
精华
1
UID
1656

LT同学

发表于 2009-3-28 13:58:21 |显示全部楼层
老实话,网上查了很多资料,还不如老cao的清楚,有什么这方面的需求,还是站里找的好,比baidu,googel都强,毕竟大家的服务器都是线上跑的>

使用道具 举报

Rank: 4

注册时间
2009-4-30
最后登录
2019-7-22
在线时间
20 小时
阅读权限
50
积分
984
帖子
17
主题
0
精华
0
UID
2786
发表于 2009-5-2 11:15:33 |显示全部楼层
赞同楼上的,无意中发现linuxtone,如获至宝。

使用道具 举报

Rank: 1

注册时间
2009-5-6
最后登录
2019-7-22
在线时间
24 小时
阅读权限
1
积分
18
帖子
32
主题
8
精华
0
UID
2883
发表于 2009-5-6 11:57:24 |显示全部楼层
非常不错,,功能介绍的很详细。

使用道具 举报

Rank: 2

注册时间
2008-12-2
最后登录
2011-5-30
在线时间
81 小时
阅读权限
20
积分
148
帖子
67
主题
22
精华
0
UID
649

LT粉丝

发表于 2009-8-2 19:41:24 |显示全部楼层
非常非常好,本周做调优的时候用到了,感谢老大!
专注于Linux
www.zhangyiqun.cn

使用道具 举报

Rank: 4

注册时间
2009-11-2
最后登录
2019-7-22
在线时间
18 小时
阅读权限
50
积分
1920
帖子
67
主题
12
精华
0
UID
6348
发表于 2009-11-13 09:44:39 |显示全部楼层
顶一个...学习了

使用道具 举报

Rank: 4

注册时间
2009-12-6
最后登录
2017-1-12
在线时间
78 小时
阅读权限
50
积分
1600
帖子
48
主题
11
精华
0
UID
7037
发表于 2009-12-6 13:24:32 |显示全部楼层
记得用这个参数 apache  --with-mpm-worker

使用道具 举报

Rank: 3Rank: 3

注册时间
2009-9-10
最后登录
2019-7-22
在线时间
18 小时
阅读权限
30
积分
636
帖子
8
主题
2
精华
0
UID
5310
发表于 2010-2-26 23:57:56 |显示全部楼层
好贴支持

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-5-27
最后登录
2016-12-27
在线时间
75 小时
阅读权限
90
积分
22764
帖子
108
主题
0
精华
0
UID
9373
发表于 2010-6-22 11:51:06 |显示全部楼层
学习了   还得细细的啃下!

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2019-12-7 09:45 , Processed in 0.034286 second(s), 15 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部