Apache,MySQL,PHP
apache的keepalive和keepalivetimeout
[
|
2010/08/24 21:51]
|
2010/08/24 21:51]
在APACHE的httpd.conf中,KeepAlive指的是保持连接活跃,类似于Mysql的永久连接。换一句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。
KeepAlive的连接活跃时间当然是受KeepAliveTimeOut限制的。如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接。
所以,一般情况下,图片较多的网站应该把KeepAlive设为On。但是KeepAliveTimeOut应该设置为多少秒就是一个值得讨论的问题了。
如果KeepAliveTimeOut设置的时间过短,例如设置为1秒,那么APACHE就会频繁的建立新连接,当然会耗费不少的资源;反过来,如果KeepAliveTimeOut设置的时间过长,例如设置为300秒,那么APACHE中肯定有很多无用的连接会占用服务器的资源,也不是一件好事。
所以,到底要把KeepAliveTimeOut设置为多少,要看网站的流量、服务器的配置而定。
KeepAlive的连接活跃时间当然是受KeepAliveTimeOut限制的。如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接。
所以,一般情况下,图片较多的网站应该把KeepAlive设为On。但是KeepAliveTimeOut应该设置为多少秒就是一个值得讨论的问题了。
如果KeepAliveTimeOut设置的时间过短,例如设置为1秒,那么APACHE就会频繁的建立新连接,当然会耗费不少的资源;反过来,如果KeepAliveTimeOut设置的时间过长,例如设置为300秒,那么APACHE中肯定有很多无用的连接会占用服务器的资源,也不是一件好事。
所以,到底要把KeepAliveTimeOut设置为多少,要看网站的流量、服务器的配置而定。
Apache的模块选择
[
|
2010/08/18 11:24]
|
2010/08/18 11:24]
Apache的模块选择是加固Apache的关键步骤之一。 我们所遵循的规则无非是老生常谈的:越少越好. 为了实现我们的功能和安全要求,以下模块必须启用:
模块名称 描述
httpd_core Apache的核心模块,在Apache的每个拷贝中都必须有
mod_access 提供基于客户端主机名、IP或者其他客户端特征的访问控制。 由于本
模块对需要使用'order'、'allow'、'deny'等指令来说是必须的,所有启用
mod_auth 提供用户认证功能 (HTTP Basic Authentication)
mod_dir 提供查找并发送"index.html", "default.htm",这些index文件功能
mod_log_config 实现Web服务器的日子功能
mod_mime 用来设置HTML文档的字符集、内容编码、处理句柄 和MIME 类型等功能
除此之外所有的Apache模块都予以禁用。因为我们不需要它们。禁用那些模块后,进一步避免因为那些模块出现问题而导致服务器出现危险。
另外单独注一笔的是另外两个Apache的模块: mod_autoindex和mod_info .
前者给目录提供自动索引,默认情况下是启用的,这导致没有index文件的服务器目录(比如http://server_name/icons/)内容很容易就被泄漏,
而后者:mod_info , 由于它的作用就是报告apache的配置,也不能启用。
以上资料基于 apache 1.3.x 写于2005年,供参考.
模块名称 描述
httpd_core Apache的核心模块,在Apache的每个拷贝中都必须有
mod_access 提供基于客户端主机名、IP或者其他客户端特征的访问控制。 由于本
模块对需要使用'order'、'allow'、'deny'等指令来说是必须的,所有启用
mod_auth 提供用户认证功能 (HTTP Basic Authentication)
mod_dir 提供查找并发送"index.html", "default.htm",这些index文件功能
mod_log_config 实现Web服务器的日子功能
mod_mime 用来设置HTML文档的字符集、内容编码、处理句柄 和MIME 类型等功能
除此之外所有的Apache模块都予以禁用。因为我们不需要它们。禁用那些模块后,进一步避免因为那些模块出现问题而导致服务器出现危险。
另外单独注一笔的是另外两个Apache的模块: mod_autoindex和mod_info .
前者给目录提供自动索引,默认情况下是启用的,这导致没有index文件的服务器目录(比如http://server_name/icons/)内容很容易就被泄漏,
而后者:mod_info , 由于它的作用就是报告apache的配置,也不能启用。
以上资料基于 apache 1.3.x 写于2005年,供参考.
[缓存加速]eAccelerator与memcached的区别与用途
[
|
2010/04/14 11:47]
|
2010/04/14 11:47]
eAccelerator和memcached,是目前较为主流的两个可使用在PHP之中的缓存加速工具.
eAccelerator专门为PHP开发,而memcached不仅仅用在PHP之中,其他所有的语言都可以使用.
eAccelerator的主要功能:
1. 缓存PHP文件的执行代码:在被缓存的代码再次被调用时,将直接从内存读取,从而在很大程度了PHP运行的速度.
2. 提供了共享内存操作函数:用户可以将自己的常见非资源对像,保存到内存之中,并可以随时读取出来.
memcached的主要功能:
提供共享内存操作函数,可以保存和读取数据
两者的共同点:
共同点:都提供了共享内存操作函数,可以用来保存和读取自己的数据
eAccelerator专门为PHP开发,而memcached不仅仅用在PHP之中,其他所有的语言都可以使用.
eAccelerator的主要功能:
1. 缓存PHP文件的执行代码:在被缓存的代码再次被调用时,将直接从内存读取,从而在很大程度了PHP运行的速度.
2. 提供了共享内存操作函数:用户可以将自己的常见非资源对像,保存到内存之中,并可以随时读取出来.
memcached的主要功能:
提供共享内存操作函数,可以保存和读取数据
两者的共同点:
共同点:都提供了共享内存操作函数,可以用来保存和读取自己的数据
Error: Can't connect to MySQL server on 'localhost' (10048)告诉你是怎么回事?
[
|
2010/01/25 00:37]
|
2010/01/25 00:37]
Discuz! info: Can not connect to MySQL server
Time: 2007-11-13 6:25pm
Script: /bbs/index.php
Error: Can't connect to MySQL server on 'localhost' (10048)
Errno.: 2003
Similar error report has beed dispatched to administrator before.
以上错误分几种情况说一下(首先您要确保您的服务器及服务器环境是正常的,装一个新论坛试一下就知道了):
1. 如果您是虚拟空间,出现以上错误,有可能是限制而引起,只有找您买虚拟空间的服务商解决,或是更换更好的空间
2. 有可能是攻击,攻击会导致服务器内存被占完,然后MYSQL数据库没内存用了,MYSQL就挂了,就会出现以上错误。
3. 有可能是程序出错,或是某个数据表出错,直接把整台服务器的MYSQL拉死了,然后出现上面错误。
4. 也有可能是服务器中安装的防火墙引起的。
Time: 2007-11-13 6:25pm
Script: /bbs/index.php
Error: Can't connect to MySQL server on 'localhost' (10048)
Errno.: 2003
Similar error report has beed dispatched to administrator before.
以上错误分几种情况说一下(首先您要确保您的服务器及服务器环境是正常的,装一个新论坛试一下就知道了):
1. 如果您是虚拟空间,出现以上错误,有可能是限制而引起,只有找您买虚拟空间的服务商解决,或是更换更好的空间
2. 有可能是攻击,攻击会导致服务器内存被占完,然后MYSQL数据库没内存用了,MYSQL就挂了,就会出现以上错误。
3. 有可能是程序出错,或是某个数据表出错,直接把整台服务器的MYSQL拉死了,然后出现上面错误。
4. 也有可能是服务器中安装的防火墙引起的。
mysql安装好需要优化配置一下
[
|
2010/01/25 00:35]
|
2010/01/25 00:35]
mysql安装好需要优化配置一下
2007-06-22 08:00
mysql安装好需要优化配置一下,打开c:\windows\my.ini文件
第一种
QUOTE:
#This File was made using the WinMySQLAdmin 1.4 Tool
#2004-2-23 16:28:14
#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions
[mysqld]
basedir=D:/mysql
#bind-address=210.5.*.*
datadir=D:/mysql/data
#language=D:/mysql/share/your language directory
2007-06-22 08:00
mysql安装好需要优化配置一下,打开c:\windows\my.ini文件
第一种
QUOTE:
#This File was made using the WinMySQLAdmin 1.4 Tool
#2004-2-23 16:28:14
#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions
[mysqld]
basedir=D:/mysql
#bind-address=210.5.*.*
datadir=D:/mysql/data
#language=D:/mysql/share/your language directory
apache log format中设置程序执行时间
[
|
2008/10/01 23:02]
|
2008/10/01 23:02]
添加 [%Ts] ,例如:
LogFormat “%v %h %l %u %t [%Ts] \”%r\” %>s %b”
LogFormat “%v %h %l %u %t [%Ts] \”%r\” %>s %b”
Apache日志不记录图片文件设置方法是
[
|
2008/10/01 23:00]
|
2008/10/01 23:00]
编辑httpd.conf 设置如下:
SetEnv IMAG 1
CustomLog logs/access_log combined env=!IMAG
这样记录文件access_log就不会记录ico|gif|jpg|png|bmp|swf的访问记录,同样也可以加上css|js才过滤css和js文件,效果很好.
但是这种记录限制只限制于做虚拟主机的时候没有同时设定记录文件的时候会参照这个方式记录在access_log文件里.不过httpd.conf里默认还有另外一个类似不记录虚拟主机日志的日志文件.
(设定:服务器是windows20003,装有apache2.3 php5 mysql zend gd)
参照:
#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a
# container, they will be logged here. Contrariwise, if you *do*
# define per- access logfiles, transactions will be
# logged therein and *not* in this file.
#
CustomLog logs/access.log common
这样会重复记录一个文件access.log ,所以可以注释掉上面那一行:
#CustomLog logs/access.log common
SetEnv IMAG 1
CustomLog logs/access_log combined env=!IMAG
这样记录文件access_log就不会记录ico|gif|jpg|png|bmp|swf的访问记录,同样也可以加上css|js才过滤css和js文件,效果很好.
但是这种记录限制只限制于做虚拟主机的时候没有同时设定记录文件的时候会参照这个方式记录在access_log文件里.不过httpd.conf里默认还有另外一个类似不记录虚拟主机日志的日志文件.
(设定:服务器是windows20003,装有apache2.3 php5 mysql zend gd)
参照:
#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a
# container, they will be logged here. Contrariwise, if you *do*
# define per-
# logged therein and *not* in this file.
#
CustomLog logs/access.log common
这样会重复记录一个文件access.log ,所以可以注释掉上面那一行:
#CustomLog logs/access.log common
Apache/resin log输出格式
[
|
2008/10/01 22:58]
|
2008/10/01 22:58]
Apache 一般有两种日志格式:
通用日志格式(Common Log Format) 和 组合日志格式(Combined Log Format)
http.conf中默认格式如下:
LogFormat “%h %l %u %t \”%r\” %>s %b” common
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-agent}i\”" combined
也可以使用自定义,这里使用`分隔 日志参数
%h`%l`%u`%{%Y-%m-%d %H:%M:%S}t`%r`%s`%b`%{Referer}i`%{User-Agent}i`%{X-Up-Calling-Line-ID}i
输出结果如下:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] “GET /apache_pb.gif HTTP/1.0″ 200 2326
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] “GET /apache_pb.gif HTTP/1.0″ 200 2326 “http://www.example.com/start.html” “Mozilla/4.08 [en] (Win98; I ;Nav)”
172.16.0.115`-`-`2008-03-13 11:00:03`GET /logo.gif HTTP/1.1`200`2893`http://172.16.0.252/index.jsp `Opera/9.26 (Windows NT 5.1; U; zh-cn)`-
通用日志格式(Common Log Format) 和 组合日志格式(Combined Log Format)
http.conf中默认格式如下:
LogFormat “%h %l %u %t \”%r\” %>s %b” common
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-agent}i\”" combined
也可以使用自定义,这里使用`分隔 日志参数
%h`%l`%u`%{%Y-%m-%d %H:%M:%S}t`%r`%s`%b`%{Referer}i`%{User-Agent}i`%{X-Up-Calling-Line-ID}i
输出结果如下:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] “GET /apache_pb.gif HTTP/1.0″ 200 2326
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] “GET /apache_pb.gif HTTP/1.0″ 200 2326 “http://www.example.com/start.html” “Mozilla/4.08 [en] (Win98; I ;Nav)”
172.16.0.115`-`-`2008-03-13 11:00:03`GET /logo.gif HTTP/1.1`200`2893`http://172.16.0.252/index.jsp `Opera/9.26 (Windows NT 5.1; U; zh-cn)`-
记录PHP错误日志
[
|
2008/10/01 22:57]
|
2008/10/01 22:57]
对于PHP开发人员来说,一旦某个产品投入使用,那么第一件事就是应该将display_errors选项关闭,以免因为这些错误所透露的路径、数据库连接、数据表等信息而遭到黑客攻击。
某个产品投入使用后,难免会有错误信息,那么如何记录这些对开发人员非常有用的信息呢?
将PHP的log_errors开启即可,默认是记录到WEB服务器的日志文件里,比如Apache的error.log文件。
当然也可以记录错误日志到指定的文件中。
另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。
某个产品投入使用后,难免会有错误信息,那么如何记录这些对开发人员非常有用的信息呢?
将PHP的log_errors开启即可,默认是记录到WEB服务器的日志文件里,比如Apache的error.log文件。
当然也可以记录错误日志到指定的文件中。
# vim /etc/php.ini
display_errors = Off
log_errors = On
error_log = /var/log/php-error.log
display_errors = Off
log_errors = On
error_log = /var/log/php-error.log
另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。
apache 内存优化
[
|
2008/09/26 15:44]
|
2008/09/26 15:44]
我在一个行业应用软件中,因为业务需求(监控页面)使用ajax定时刷新技术,由于该页面长期运行,导致内存暴增,3天apache.exe,就占用近2G,通过google和百度的搜索,发现影响apache内存性能的主要有一下几个参数:
ThreadsPerChild
MaxRequestsPerChild
-------------
KeepAlive
MaxKeepAliveRequests
KeepAliveTimeout
参数简单介绍如下:
ThreadsPerChild
MaxRequestsPerChild
-------------
KeepAlive
MaxKeepAliveRequests
KeepAliveTimeout
参数简单介绍如下:
Apache 中 KeepAlive 配置的合理使用
[
|
2008/09/25 10:18]
|
2008/09/25 10:18]
Leftleg's Blog 2007年09月26日
在 Apache 服务器中,KeepAlive 是一个布尔值,On 代表打开,Off 代表关闭,这个指令在其他众多的 HTTPD 服务器中都是存在的。
KeepAlive 配置指令决定当处理完用户发起的 HTTP 请求后是否立即关闭 TCP 连接,如果 KeepAlive 设置为On,那么用户完成一次访问后,不会立即断开连接,如果还有请求,那么会继续在这一次 TCP 连接中完成,而不用重复建立新的 TCP 连接和关闭TCP 连接,可以提高用户访问速度。
那么我们考虑3种情况:
1。用户浏览一个网页时,除了网页本身外,还引用了多个 javascript 文件,多个 css 文件,多个图片文件,并且这些文件都在同一个 HTTP 服务器上。
2。用户浏览一个网页时,除了网页本身外,还引用一个 javascript 文件,一个图片文件。
3。用户浏览的是一个动态网页,由程序即时生成内容,并且不引用其他内容。
对于上面3中情况,我认为:1 最适合打开 KeepAlive ,2 随意,3 最适合关闭 KeepAlive
下面我来分析一下原因。
在 Apache 中,打开和关闭 KeepAlive 功能,服务器端会有什么异同呢?
先看看理论分析。
在 Apache 服务器中,KeepAlive 是一个布尔值,On 代表打开,Off 代表关闭,这个指令在其他众多的 HTTPD 服务器中都是存在的。
KeepAlive 配置指令决定当处理完用户发起的 HTTP 请求后是否立即关闭 TCP 连接,如果 KeepAlive 设置为On,那么用户完成一次访问后,不会立即断开连接,如果还有请求,那么会继续在这一次 TCP 连接中完成,而不用重复建立新的 TCP 连接和关闭TCP 连接,可以提高用户访问速度。
那么我们考虑3种情况:
1。用户浏览一个网页时,除了网页本身外,还引用了多个 javascript 文件,多个 css 文件,多个图片文件,并且这些文件都在同一个 HTTP 服务器上。
2。用户浏览一个网页时,除了网页本身外,还引用一个 javascript 文件,一个图片文件。
3。用户浏览的是一个动态网页,由程序即时生成内容,并且不引用其他内容。
对于上面3中情况,我认为:1 最适合打开 KeepAlive ,2 随意,3 最适合关闭 KeepAlive
下面我来分析一下原因。
在 Apache 中,打开和关闭 KeepAlive 功能,服务器端会有什么异同呢?
先看看理论分析。
Windows2003下Apache进程httpd.exe狂吃内存的问题
[
|
2008/09/11 21:32]
|
2008/09/11 21:32]
菜雨博客
今天买伞回来之后发现我放blog的虚拟机又出问题了,windows2003显示虚拟内存不足。于是我登录进去看,其他同样设置的机器原来都是一直好好的,为什么就是这个不行,而且这样的情况出现的不止一次了。重启,进入系统,非常慢,打开任务管理器,发现Apache的进程httpd.exe的内存占用竟然到了400多M,而且还在不停增加,难怪了。重启之后,现象一样,httpd.exe占用的内存不断增加,直到把机器拖垮。
上网搜索,很多的还是说是因为配置的原因,说是要将 httpd.conf 中的 Threadsperchild 和MaxRequestsPerchild做合适的配置。ThreadsPerChild的意思是系统启动时默认启动的等待线程数,用来等待处理客户的请求,MaxRequestsPerchild 指令设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。根据很多人的经验,一般的服务器2G内存或4G内存,ThreadsPerChild 200~300,MaxRequestsPerchild 1000~3000。我用的是虚拟机,只划了512M内存过去,我不停的修改参数设置,大致知道了占用的最大内存会是Threadsperchild的3-4倍。我最后给自己的虚拟机的设置是Threadsperchild 50 ,MaxRequestsPerchild 256 。暂时还是有用的,但是长久我就不知道了,我看到很多人还是没有用的,又有说法是这个是Apache 2.2.4及其之下的一个bug。很不幸,我用的是APMSERV的集成包,Apache是2.2.3。我刚刚在发布上篇日志的时候就看到了内存又飙到了200多M。我的直觉告诉我服务器的这个问题肯定和wordpress有关,或者是它的一个插件或者主题引起的,另外一个CMS是DEDE,基本都静态页,应该没什么问题的。但是我现在很崩溃,这么细致的试还真没有时间。
今天买伞回来之后发现我放blog的虚拟机又出问题了,windows2003显示虚拟内存不足。于是我登录进去看,其他同样设置的机器原来都是一直好好的,为什么就是这个不行,而且这样的情况出现的不止一次了。重启,进入系统,非常慢,打开任务管理器,发现Apache的进程httpd.exe的内存占用竟然到了400多M,而且还在不停增加,难怪了。重启之后,现象一样,httpd.exe占用的内存不断增加,直到把机器拖垮。
上网搜索,很多的还是说是因为配置的原因,说是要将 httpd.conf 中的 Threadsperchild 和MaxRequestsPerchild做合适的配置。ThreadsPerChild的意思是系统启动时默认启动的等待线程数,用来等待处理客户的请求,MaxRequestsPerchild 指令设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。根据很多人的经验,一般的服务器2G内存或4G内存,ThreadsPerChild 200~300,MaxRequestsPerchild 1000~3000。我用的是虚拟机,只划了512M内存过去,我不停的修改参数设置,大致知道了占用的最大内存会是Threadsperchild的3-4倍。我最后给自己的虚拟机的设置是Threadsperchild 50 ,MaxRequestsPerchild 256 。暂时还是有用的,但是长久我就不知道了,我看到很多人还是没有用的,又有说法是这个是Apache 2.2.4及其之下的一个bug。很不幸,我用的是APMSERV的集成包,Apache是2.2.3。我刚刚在发布上篇日志的时候就看到了内存又飙到了200多M。我的直觉告诉我服务器的这个问题肯定和wordpress有关,或者是它的一个插件或者主题引起的,另外一个CMS是DEDE,基本都静态页,应该没什么问题的。但是我现在很崩溃,这么细致的试还真没有时间。
限制Apache日志文件大小的方法
[
|
2008/09/09 01:16]
|
2008/09/09 01:16]
access.log,件在 WEB 服务器运行一段时间之后会达到几十兆甚至上百兆,如果Apache运行有错误,error.log也会增大到几十兆,我们知道系统读写一个大的文本文件是非常耗内存的,因此限定日志文件大小十分必要。
通常我们是在{$apache}/conf/httpd.conf中设置Apache的参数,然而我们并没有发现可以设置日志文件大小的配置指令,通过参考http://httpd.apache.org/docs/2.0/programs/rotatelogs.html,可以用apache 自己的程序 rotatelogs.exe(位于 {$apache}/bin/目录下),来限制日志文件的大小。
Usage: rotatelogs [-l] [offset minutes from UTC] or
Add this:
TransferLog "|rotatelogs /some/where 86400"
or
TransferLog "|rotatelogs /some/where 5M"
to httpd.conf. The generated name will be /some/where.nnnn where nnnn is the system time at which the log nominally starts (N.B. if using a rotation time, the time will always be a multiple of the rotation time, so you can synchronizecron scripts with it). At the end of each rotation time or when the file size is reached a new log is started.
在 Windows 下的设置例子如下:
通常我们是在{$apache}/conf/httpd.conf中设置Apache的参数,然而我们并没有发现可以设置日志文件大小的配置指令,通过参考http://httpd.apache.org/docs/2.0/programs/rotatelogs.html,可以用apache 自己的程序 rotatelogs.exe(位于 {$apache}/bin/目录下),来限制日志文件的大小。
Usage: rotatelogs [-l]
Add this:
TransferLog "|rotatelogs /some/where 86400"
or
TransferLog "|rotatelogs /some/where 5M"
to httpd.conf. The generated name will be /some/where.nnnn where nnnn is the system time at which the log nominally starts (N.B. if using a rotation time, the time will always be a multiple of the rotation time, so you can synchronizecron scripts with it). At the end of each rotation time or when the file size is reached a new log is started.
在 Windows 下的设置例子如下:
解决Apache出现的CPU高占用率的问题
[
|
2008/09/08 23:50]
|
2008/09/08 23:50]
作者: Jet Mah from Java堂
所谓Apache出现CPU高占用率就是指Apache在一段时间内持续占用很高的CPU使用率,甚至达到CPU100%,这个时候造成网站无法访问。解决的方法就是仔细观察Apache的日志文件,查阅错误的信息。
下面我们针对几种错误信息进行分析并给出解决的方法:
1. Apache与WinSock v2相冲突
Apache官方提供的手册中提到,在Windows系统下Apache2.x为了提高性能而使用了Microsoft WinSock v2 API,但是一些常见的防火墙软件会破坏他的正确性,从而使得Apache出现死循环操作造成CPU100%。
其错误提示如下所示:
[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
[error] (OS 10038) : Child 3356: Encountered too many errors accepting client connections. Possible causes: dynamic address renewal, or incompatible VPN or firewall software. Try using the Win32DisableAcceptEx directive.
[warn] (OS 121)信号灯超时时间已到。 : winnt_accept: Asynchronous AcceptEx failed.
[warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed.
可以依次采用下面的方法来解决上面的问题,如果进行了一步还有问题就继续下一步:
1) 在httpd.conf文件中使用 Win32DisableAcceptEx 禁止Apache使用 Microsoft WinSock v2 API :
所谓Apache出现CPU高占用率就是指Apache在一段时间内持续占用很高的CPU使用率,甚至达到CPU100%,这个时候造成网站无法访问。解决的方法就是仔细观察Apache的日志文件,查阅错误的信息。
下面我们针对几种错误信息进行分析并给出解决的方法:
1. Apache与WinSock v2相冲突
Apache官方提供的手册中提到,在Windows系统下Apache2.x为了提高性能而使用了Microsoft WinSock v2 API,但是一些常见的防火墙软件会破坏他的正确性,从而使得Apache出现死循环操作造成CPU100%。
其错误提示如下所示:
[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
[error] (OS 10038) : Child 3356: Encountered too many errors accepting client connections. Possible causes: dynamic address renewal, or incompatible VPN or firewall software. Try using the Win32DisableAcceptEx directive.
[warn] (OS 121)信号灯超时时间已到。 : winnt_accept: Asynchronous AcceptEx failed.
[warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed.
可以依次采用下面的方法来解决上面的问题,如果进行了一步还有问题就继续下一步:
1) 在httpd.conf文件中使用 Win32DisableAcceptEx 禁止Apache使用 Microsoft WinSock v2 API :
Windows NT系统下的Apache性能优化
[
|
2008/09/08 23:43]
|
2008/09/08 23:43]
一般来说,WinNT系统下使用IIS,而Apache在Linux下应用的比较多,但是依然有很多人在WinNT系统下使用Apache而非IIS,可能是基于对Windows系统的熟悉吧。今天就来说一下在Windows系统下如果优化Apache的性能。
mpm_winnt.c是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。
mpm_winnt主要通过ThreadsPerChild和MaxRequestsPerChild两个参数来优化Apache,下面详细来说明一下。
ThreadsPerChild
这个参数用于设置每个进程的线程数, 子进程在启动时建立这些线程后就不再建立新的线程了. 一方面因为mpm_winnt不能启动多个进程, 所以这个数值要足够大,以便可以处理可能的请求高峰; 另一方面该参数以服务器的响应速度为准的, 数目太大的反而会变慢。因此需要综合均衡一个合理的数值。
mpm_winnt上的默认值是64, 最大值是1920. 这里建议设置为100-500之间,服务器性能高的话值大一些,反之值小一些。
MaxRequestsPerChild
该参数表示每个子进程能够处理的最大请求数, 即同时间内子进程数目.设置为零表示不限制, mpm_winnt上的默认值就是0.
方参考手册中不建议设置为0, 主要基于两点考虑: (1) 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存; (2) 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
mpm_winnt.c是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。
mpm_winnt主要通过ThreadsPerChild和MaxRequestsPerChild两个参数来优化Apache,下面详细来说明一下。
ThreadsPerChild
这个参数用于设置每个进程的线程数, 子进程在启动时建立这些线程后就不再建立新的线程了. 一方面因为mpm_winnt不能启动多个进程, 所以这个数值要足够大,以便可以处理可能的请求高峰; 另一方面该参数以服务器的响应速度为准的, 数目太大的反而会变慢。因此需要综合均衡一个合理的数值。
mpm_winnt上的默认值是64, 最大值是1920. 这里建议设置为100-500之间,服务器性能高的话值大一些,反之值小一些。
MaxRequestsPerChild
该参数表示每个子进程能够处理的最大请求数, 即同时间内子进程数目.设置为零表示不限制, mpm_winnt上的默认值就是0.
方参考手册中不建议设置为0, 主要基于两点考虑: (1) 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存; (2) 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。




