为了满足网站高负荷的要求,在调整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下,而分成两种。
(本文为转载)
分享到:
相关推荐
这个版本是特别为wins系列32位系统优化的,对于那些在资源有限或旧硬件上运行32位操作系统的用户来说非常理想。 首先,让我们深入了解一下Apache Tomcat。Tomcat是由Apache Software Foundation维护的项目,它遵循...
2. 性能优化:监控Cacti的性能,如数据库查询效率、图表渲染速度,调整配置以提升系统响应速度。 3. 故障排查:遇到监控数据异常时,检查设备状态、网络连接、SNMP配置等,定位问题并解决。 4. 安全性检查:定期修改...
"nginx-wins版本压缩包粉丝专属下载包.rar" 提供的是专为Windows操作系统优化的Nginx版本。下面将详细介绍Nginx在Windows平台上的安装、配置、以及主要功能。 一、Nginx for Windows安装 1. 解压压缩包:首先,你...
5. 性能优化:包括缓存策略、负载均衡、压缩技术等,以提升Web服务器的响应速度和处理能力。 6. 安全考虑:实施防火墙规则、安装Web应用防火墙、定期更新补丁、限制不必要的访问权限等,以保障服务器安全。 通过...
网站服务器配置与管理是IT行业中一个至关重要的环节,它涵盖了多个方面,包括网络架构、DNS域名系统、DHCP动态主机配置协议、路由器设置以及WINS网络标识服务和NAT网络地址转换。以下是对这些关键概念的详细解释: ...
6. **系统优化与评测**:探讨如何调整系统设置以提高整体性能,以及如何进行软硬件的性能评测。 7. **计算机病毒防治**:学习病毒的原理,预防措施和清除方法。 8. **故障诊断与解决**:识别软硬件故障的原因、现象...
在Windows系统上进行Hadoop的本地测试可以帮助开发者在不依赖集群的情况下,快速验证代码功能和性能。 描述中的关键词“Windows本地”意味着我们将讨论如何在个人计算机上的Windows操作系统中设置Hadoop,以便进行...
**正文** Maven 3.1.0 是一个重要的里程碑版本,在Java开发领域,它扮演着...在使用过程中,结合Apache-maven-3.1.0-alpha-1这个压缩包中的文件,开发者可以搭建和运行Maven环境,从而享受这一版本带来的所有改进。
综上所述,阿里云Cassandra结合了Apache Cassandra的核心优势,并在云环境中进行了优化,提供了一套高效、稳定且易于管理的大规模数据存储解决方案。通过深入理解其技术架构和最佳实践,用户可以更好地利用这一服务...
常见的服务器软件包括文件服务器、数据库服务器(如Oracle、MySQL、SQL Server)、邮件服务器(如Sendmail、Exchange、Lotus Domino)、网页服务器(如Apache、IIS)、FTP服务器、应用服务器(如WebLogic、JBoss)、...
- Maven 3.5.3 版本可能包括对之前版本的bug修复,性能优化,以及对Java新版本的支持等。 - 它可能增强了对多模块项目和大型项目构建的处理能力,提高了构建速度和稳定性。 8. **Maven 配置** - 用户可以自定义`...