继续对 httpd defunct 的试验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

继续对httpd 的试验

最近的httpd 又频繁增多,主要原因现在还在寻找中。今天通宵看了很多文摘,同时也有所心得。现在把整个过程记录一下,以备后用。

第一步,针对log 文件的2G 的limitation 作排除性工作。(关于2G log 的讨论请看[internetworkers] httpd 。但是这个bug 已经被修补。)

这一步也就是清除以前的log文件,使用新的cronolog来使log文件进行循环记录。前几天已经对cronolog 作了介绍,这里仅仅把在httpd.conf 和awstats.hostname.conf中修改的部分指摘一下。

建立新log 目录

# mkdir /usr/local/apache2/log//

httpd.conf 中的log 部分的修改

ErrorLog "|/usr/local/sbin/cronolog

/usr/local/apache2/logs//-error_log.%Y-%m"

CustomLog "|/usr/local/sbin/cronolog

/usr/local/apache2/logs//_log.%Y-%m" combined env=!LIMITIP

awstats.weblog.conf中的修改

LogFile="/usr/local/apache2/logs//-acce ss_log.%YYYY-1-%MM-1"

备份好awstats的数据目录,在我的主机里面是/var/lib/awstats/

这样就排除了2G log 的限制而导致httpd 的问题。

第二步,由PHP script 带来的一些修改。

查看了apache的error log文件,发现有以下错误信息。

[client 61.135.145.216] PHP Warning: mysql_errno(): supplied argument is not a valid MySQL-Link resource in

/home/hzmjp/public_html/phpbb2.1.1_patched_from_2.1.0/db/mysql4.php on line 331

[client 202.121.192.91] PHP Warning: mysql_connect(): #HY000Host

'' is not allowed to connect to this MySQL server in

/home/hzmjp/public_html/phpbb2.1.1_patched_from_2.1.0/db/mysql4.php on line 48, referer:

PHP Warning: mysql_connect(): Too many connections ... <这个是我在用httperf测试时出现的,暂且也算一个问题吧...>

这里首先对mysql_connect(): Too many connections进行修正。

我google了一下后,以下这篇文章给我很多hints:

PHAkt Forum :: mysql_connect() too many connections??? URGENT!!

其主要原因是mysql_pconnect() 的mysql_connect()的互用问题。于是查询了错误所在行,即phpbb 2.1的./db/mysql4.php 中的第48 行。将

$this->db_connect_id = ($this->persistency) ?

mysql_pconnect($this->server, $this->user, $this->password) :

mysql_connect($this->server, $this->user, $this->password);

改为了:

$this->db_connect_id = ($this->persistency) ? mysql_connect($this->server, $this->user, $this->password) : mysql_connect($this->server, $this->user, $this->password);

同时,根据MySQL Manual 中关于Too many connections此的描述,修改了f 等一些设置。

第三步,对MySQL 的f 和php.ini 的一些修改。

首先添加了改一下f 中的设置

max_connections = 300

同时我也查询了一下MySQL 关于performance的问题。使用一下语句可以查询MySQL 的现状:

[root@dalouis awstats]# mysqladmin extended -u root -p

Enter password:

请看接下来这步是凭感觉做的,即修改php.ini 中关于memory 的部分:memory_limit = 8M (原先我设置了30M)

第四步,优化一下httpd.conf 中关于works.c 的配置。

这点曾经已经讨论地很透彻了。又一遍通读了 MPM works 的How it Works和fei的Apache 2.0性能优化—MPM的选择与配置。现在把整个httpd.conf 的works.c 部分帖一下,里面有详细的解释,也请大家指教了。

我的配置works.c.txt 和默认的配置works.c.def.txt

第五步,关于FastCGI 和Keepalive 的一些考虑。

因为在实际操作中,往往在打开诸如MT 和awstats 这类cgi 和pl 网页时(网页比较长,同时对cpu 的要求大),会出现打到一半打不开(此时httpd 出现可能性很大)的情况。所以关于FastCGI 之类的资料也搜索了一下。

看了CU上的Apache的进程与线程讨论(请忽视此帖上关于类似于ServerLimit 等的讨论,这样只会把自己的思路和理解搞混),发现了mmHunter 的回复:

首先,如果你想用php的话,就不要用worker方式的mpm了,因为php到现在还没有保证所有的代码都是线程安全的如果你真的这么有兴趣试验

Apache2+worker+php,可以考虑fastcgi方式的php, 具体可以参考

现在对这个还没有来得及研究,不过可以给人很多hint.

第六步,检测apache 的状态。

使用Server-Status 来检测apache 的状态。注意,需要在httpd.conf 中将ExtendedStatus On才能实施检测。

相关文档
最新文档