为了满足网站高负荷的要求,在调整Apache参数时发现进程经常占用内存过多导致当机。经过不断的优化和修改参数组合,终于让服务器稳定 下来,可以满足大量访问的考验和应用要求
为了满足网站高负荷的要求,在调整Apache参数时发现进程经常占用内存过多导致当机。经过不断的优化和修改参数组合,终于让服务器稳定 下来,可以满足大量访问的考验和应用要求。笔者总结了调试过程中的问题和解决办法如下,以供有类似需求的网管员参考(系统环境为Windows Server 2003和apache2.2.8):
1、http-mpm.conf设置
Apache的线程数控制文件为http-mpm.conf,在conf/exrtra目录下面,要使该配置文件起作用需要在httpd.conf 中将 Include conf/extra/httpd-mpm.conf前#去掉,以使得http-mpm.conf生效。
在Windows系统中,起作用的是Winnt mpm段,
复制代码代码如下:
<IfModule mpm_winnt_module>
ThreadsPerChild 150
MaxRequestsPerChild 0
</IfModule>
以上是缺省的配置,一般情况下够用了,但负荷较大的网站就需要修改了,否则访问网站会变慢或没有响应。实际设置中可以根据apache-status查看apache实时连接状态,查看其中线程占用数目情况来进行相应的调整,我的服务器最后设置如下:
复制代码代码如下:
<IfModule mpm_winnt_module>
ThreadsPerChild 350
ThreadLimit 350
MaxRequestsPerChild 10000
</IfModule>
其中ThreadLimit是占用系统线程数限制,修改后会在apache-status中直接看到效果,就是对应的最大的可用线程数(如图所示)。
MaxRequestsPerChild是进程的最大的请求数目,既指网站收到请求的缓存数。设置太小了会影响服务器性能,因为会占用较多cpu时 间,太大了则会占用内存资源。一般大型的网站文件个数都是成千上万,所以管理员应该根据网站情况自己设定,只要不为0(无限制)就可以,以防止内存溢出。
ThreadsPerChlid是Apache进程的子线程数,意思是服务器开了这么多的线程数来等待响应客户端请求。该参数需要根据 apache-status实时的监控情况来调节,太大会导致内存增长过快,直到服务器当机,太小会导致服务器连接队列在高峰期时占满,从而导致网站连接 慢。同时我们应该修改另一个配置文件httpd-default.php中的超时设置来配合这个参数。
2、httpd-default.conf设置
在httpd.conf中去掉Include conf/extra/httpd-default.conf前的#以使httpd-default.php生效。我们需要调节以下参数:
Timeout 15
该参数为连接超时,缺省的300秒显然太大,缩小该参数就会减少同时连接数,即用户实际占用的线程数,这样就可以起到配合上面ThreadsPerChlid参数的作用。
KeepAlive On
该参数为是否保持活连接,目前网站中一个页面一般会包含多个文件,所以相应用户访问时会有多个请求,因此开启可以提高服务器性能。
MaxKeepAliveRequests 50
该参数为最大的活连接请求数,可以根据网页实际包含的文件数目自行调节。
KeepAliveTimeout 5
该参数为活连接的超时时间,一般只要设置成小于Timeout即可。
这样设置后,Apache在响应请求和防止恶意攻击方面就取得较为平衡的效果,当然由于内存回收机制和进程管理不同,Windows下长期运行 Apache还是不如Unix稳定,因此我们可以让Apache在每天凌晨访问人数少时自动重启一次,以回收资源。用Windows自带的计划任务就可以 简单的实现。这样,我们就使Apache在Windows平台下像Unix一样长期稳定的提供服务了。
windows下apache及mysql定时自动重启&服务器定时自动重启
有时候觉得,服务器运行时间过长,造成服务器内存等压力过大。因此,不用重新启动服务器的情况下,完成apache和mysql的内存释放,是非常有益处的(把重启时间设置在访问量最低的)。
首先,apache的重新启动。
有两种apache自动定时重启的方法(两种,第二种可一同时启动apache和mysql,所以推荐一下第二种):
第一种、使用任务计划
开始>>程序>>附件>>管理工具>>任务计划
添加任务计划>>下一步>>apache restart>>选择时间(可以设置的为每天凌晨2-4点)>>一路确定即可。
第二种(个人觉得比较简单,同样也是任务计划) 采用at命令添加计划任务
1、在c:盘根目录新建一个apacheautostart.bat文件,然后右键编辑,将文件内容设为如下后保存:
复制代码代码如下:
@ECHO OFF
net stop apache2
net start apache2
net stop mysql
net start mysql
(附加说明:上面的apache2与mysql为服务名称。)
2、"开始"-》运行"cmd"-》执行命令"at 04:00 c:apacheautostart.bat"
这样每天早晨4点系统就会自动重启apache与mysql
(附加说明:04:00为重启时间,c:autostartserver.bat为第一步的bat文件地址)
mysql的重新启动,也通过上面at命令方法重新启动了,所以推荐一下第二种方法。
同样,你也可一给自己的服务器加上一个定时自动重启的功能(比如每周重新启动服务器一次)。
可以用at命令和shutdown命令配合实现。
AT命令可以安排在特定日期和时间运行命令和程序,shutdown则可以在命令行下关闭并重启计算机,要在每周日的特定时间自动重启计算机,只需 在命令提示符下输入"at 02:00 /every:星期一 shutdown /l /r /y /c",这将在每周一的凌晨2点自动重启计算机。
通用优化技巧
对于Apache服务器来说,为了提高性能需要进行的某些参数调整具有通用性,也就是说只要采用了就可以使其性能更好。
1.关闭DNS和名字解析
* HostnameLookups on | off | double
Apache 1.3之前HostnameLookups默认是打开的。这样客户端在访问服务器时,服务器将要解析客户端的主机名,并将其保存在日志文件中。对客户端进行域名反向解析会大幅降低服务器速度,所以最好将其设置为Off。关闭指令如下:
HostnameLookups off
* UseCanonicalName on | off | dns
打开UseCanonicalName是Web服务器的标准做法。这是因为客户发送的大部分请求都是对本服务器的引用,打开该项设置就能使用ServerName和Port选项的设置内容构建完整的URL。如果将这个参数设置为Off,那么Apache将使用从客户请求中获得服务器名字和端口值,重新构建URL。
如果你不需要在Apache中架设虚拟主机,建议设置为:
UseCanonicalName on
2.关闭多余模块
Apache采用了模块化设计,管理员可以有选择地加载一些模块来加强服务器的功能。这些模块,可以在创建服务器时静态编译到服务器的二进制代码中,也可以编译成一些独立服务器程序的Dynamic Shared Objects(DSO)文件,在Apache启动的时候根据需要,动态加载。事实证明,不加载多余的模块总是可以提高Apache的性能。
Apache的DSO模块是在httpd.conf中以:
LoadModule access_module modules/mod_access.so
方式加载。当不需要某个模块时,只要在其前添加“#”,注释掉该行。
一般来说,不需要加载以下模块:
mod_include.so:
服务器端包含,是一种已经过时的技术。
mod_autoindex.so:
如果不希望Apache列目录显示,可以删除。
mod_access.so、mod_auth.so:
如果你不需要进行安全验证,也没有必要加载。
最好加载以下模块:
mod_dir.so:
用于定义缺省文档index.php、index.jsp等。
mod_log_config.so:
用于定义记录文件格式。
mod_mime.so:
定义文件类型的关联。
最后需要说明一点的是,并不是加载所有的模块都会降低Apache性能。比如mod_zip可以把文件压缩之后再传给客户端,这样就可以减少40%左右的网络流量,而mod_expires则可以减少10%左右的重复请求。
3.取消.htaccess验证
除非你确定需要使用.htaccess文件来控制客户端对相应目录的访问权限,否则设置“AllowOverride None”,可以免除Apache在每个目录搜索.htaccess文件之苦。
4.取消符号链接
FollowSymLinks允许使用符号连接,这将使用浏览器有可能访问文档根目录(DocumentRoot)之外的内容,并且只有符号连接的目的与符号连接本身为同一用户所拥有时(SymLinksOwnerMatch),才允许访问,这个设置将增加一些安全性,但将耗费Apache大量的资源。
笔者建议:
Options FollowSymLinks
但是不要启用SymLinksOwnerMatch。
5.打开KeepAlive支持
在HTTP 1.0中和Apache服务器的一次连接只能发出一次HTTP请求,而KeepAlive参数支持HTTP 1.1版本的一次连接,多次传输功能,这样就可以在一次连接中发出多个HTTP请求。从而避免对于同一个客户端需要打开不同的连接。很多请求通过同一个TCP连接来发送,可以节约网络和系统资源。
在Apache的配置文件httpd.conf中,设置:
KeepAlive on
KeepAliveTimeout 15
这样就能限制每个连接的保持时间是15秒。在我们的评测中发现,打开KeepAlive之前,ab测试的数据为:
Requests per second: 201.32 [#/sec] (mean)
Time per request: 298.031 [ms] (mean)
Time per request: 4.967 [ms] (mean, across all concurrent requests)
Transfer rate: 839.49 [Kbytes/sec] received
而打开KeepAlive支持之后,ab测试数据为:
Requests per second: 341.70 [#/sec] (mean)
Time per request: 175.594 [ms] (mean)
Time per request: 2.927 [ms] (mean, across all concurrent requests)
Transfer rate: 1437.04 [Kbytes/sec] received
最能反应Apache服务器性能的Requests per second,即每秒完成的请求次数从201.32提升到341.70,提升幅度为70%。虽然在现实环境中,不可能有这么多的同一连接发出的请求,但启用KeepAlive确实在一定程度上可以提高Apache服务器的吞吐量和反应速度。
另外,可以设置:
MaxKeepAliveRequests 100
把MaxKeepAliveRequests设置的尽量大,可以在一次连接中进行更多的HTTP请求。但在我们的测试中还发现,把MaxKeepAliveRequests设置成1000,则评测的客户端容易出现“Send requesttimed out”的错误,所以具体数值还要根据自己的情形来设置。
参数决定性能
Apache除了可以通过一些常规方式进行优化外,还需要调整其运行参数,这样才能构建一个适合相应网络环境的Web服务。这些指令从两个级别对Apache进行了优化。
* 进程级(Process-level)
进程级的参数用来控制Apache相应的客户端请求的进程数Process(在Windows下称之为线程数,threads)。
* 协议级(Protocol-level)
协议级的指令则用来控制Apache与客户端的连接多久才自动断开。
由于Windows和Linux/UNIX设计原理的不同,所以进程级的指令根据Apache是工作在Linux/UNIX或者Windows下,而分成两种。
(本文为转载)
分享到:
相关推荐
win2003网络服务管理-winswin2003网络服务管理-winswin2003网络服务管理-wins
最全的 电脑 wins 的bois设置教材
本次实验掌握了在Windows Server 2003系统上安装和配置WINS服务器服务的方法,掌握使用静态映射的方法,及如何管理WINS服务器,配置WINS客户机等,加深了对Windows Server 2003系统中服务的认识。
Windows Server 2003从入门到精通系列之十二:Windows server 2003 服务应用大全之WINS服务使用详解.
Windows Server 2003系统中的WINS功能: (1)增强的 WINS 数据库搜索和筛选功能可以获得自定义的和精确的查询结果。 (2)可以阻止来自指定服务器记录的复制或者接受来自指定服务器记录的复制。 (3)不仅可以使用...
Wise Game Booster是一款轻量级的游戏加速工具,通过一键优化处理系统中存在的问题,可以提高游戏性能。优化项目包括关闭不必要的进程,停止与游戏无关的系统服务。让windows资源管理器以独立进程运行来避免系统...
Windows server 2003 服务应用大全之WINS服务使用详解
Windows+Server+2003搭建WINS服务器.pdf
Apache_OpenOffice_4.1.7_Win_x86_install_zh-CN.exe wins版本 wins版本
WINS服务器的配置WINS服务器的配置WINS服务器的配置WINS服务器的配置WINS服务器的配置WINS服务器的配置WINS服务器的配置
已经安装通过了,不想用系统盘安装的试试独立安装吧
mysql-wins系统的32和64位,下载安装即可使用,方便实在
5. 构建wins服务器.doc 实验 构建wins服务器 1、目的 让学生掌握Web知识。...3) 在【网络服务】对话框中,选择其中的【Windows Internet 命令服务(WINS)】子组件,单击【确定】按钮开始安装WINS服务。
WINS服务器
第1章 Windows Server 2003 安装与启动 第2章 Windows Server 2003 本地用户和组 第3章 Windows Server 2003域及其帐户管理 第4章 利用NTFS实现文件系统的安全 第5章 Windows Server 2003 磁盘管理 第6章 Windows ...
适用绿联品牌 USB3.0外置显卡,即USB转显示driver
并介绍如何实现包括WWW、FTP在内的Internet信息服务,如何配置DNS、WINS、DHCP等网络服务,分析Windows Server 2003的系统管理和安全管理方法,以及利用常用DOS命令对网络情况进行测试的方法。通过本书的学习,读者...