当前位置:Linux教程 - Linux - mod_perl升级实验

mod_perl升级实验

一.说明
0.实际环境是:在一台主机上承担700台的虚拟主机,由于cgi程序对资源消耗太大导致性能不好;
现在使用mod_perl代替.
1.用mod_perl代替perl可提高perl脚本执行效率;增加php4支持可增加对.php3,.php的支持。
可以修改配置文件,使得原有的perl脚本,php3程序不做任何修改,减少了升级的工作量。
2.在perl.apache.org上提到多种mod_perl的方案,
如果哪位朋友作了实验,能否告知?([email protected])我将不胜感激.
二.httpd编译
1.系统环境:BSDI 4.1/i386/1G内存/Pentium II (696.41 MHz)
2.下载 make-3.79.1.tar,mod_perl-1.24_01.tar.gz,php-4.0.0.tar,apache_1_3_12_tar并在/usr/local/解开

3.配置libperl.so:
ln -s /usr/libdata/perl5/i386-bsdos/5.00402/CORE/libperl.so /usr/lib/libperl.so;
ldconfig;
这时ldconfig -p |grep libperl.so应该有libperl.so这一项.
4.安装make-3.79.1:
cd /usr/local/make-3.79.1;./configure;make;make install;
这样make工具将安装在/usr/local/bin下.必须确保/usr/local/bin/make是缺省的make工具,或者以新版本 make工具
覆盖原make工具:
mv /usr/bin/make make.old;mv /usr/local/bin/make /usr/bin/
5. cd /usr/local/apache_1.3.12/src/include;修改 httpd.h ""HARD_SERVER_LIMIT""为 1024.
6. cd /usr/local/apache_1.3.12; ./configure;
7. 如果mysql库文件版本太低将失败
libmysqlclient.a 及libmysqlclient.so* 需更新
找个最新版本的mysql将/lib/mysql/拷贝至/usr/mysql/lib/mysql:
8.安装php4:
cd /usr/local/php4.0.0
./configure --with-mysql=/usr/mysql
--with-apache=/usr/local/apache_1.3.12
--enable-track-var
make;make install
9.安装mod-perl:
cd /usr/loal/mod_perl
perl Makefile.PL
APACHE_PREFIX=/usr/local/apache
APACHE_SRC=../apache_1.3.12/src
DO_HTTPD=1
USE_APACI=1
EVERYTHING=1
APACI_ARGS=''--activate-module=src/modules/php4/libphp4.a
--enable-suexec --suexec-uidmin=1000 --suexec-gidmin=100''
make
make install
10.查看suexec是否有效,mod_perl及php4是否安装成功:/usr/local/apache/bin/httpd -l
应该出现
mod_perl.c
mod_php4.c
suexec enabled 3行.
11. OK
三. httpd.conf修改清单
在原httpd.conf的基础上修改如下:
#
1.主web服务器修改如下:
1)修改参数):
KeepAlive On ====> KeepAlive Off
MinSpareServers ====>50
MaxSpareServers ====>50
StartServers ====>50
MaxClients ====>128
MaxRequestsPerChild ====>50
Maxclients 150
2) AddHandler cgi-script .cgi ====> AddHandler perl-script .cgi
AddHandler perl-script .pl
3) 为支持php3到php4的升级,做如下修改:
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php
AddType application/x-httpd-php3-source .phps
4)为优化内存使用,添加一行:
PerlRequire /usr/local/apache/libexec/startup.pl
并保证startup.pl放在相应目录下,权限对

2.每一个虚拟主机部分做如下修改:
将每个虚拟主机配置部分中的ScriptAlias一行扩展为2部分:
使用Alias 替代ScriptAlias;
增加对该cgi目录设置.

例如:
修改前:
ScriptAlias /cgi-bin/ /usr/home/u640a1/cgi-bin/
修改后:
Alias /cgi-bin/ ""/usr/home/u64091/cgi-bin/""

setHandler perl-script
PerlHandler Apache::Registry
Options ExecCGI
allow from all
PerlSendHeader On


四.httpd参数调整说明
1. KeepAlive:
该参数决定每个httpd在处理完MaxRequestsPerChild个请求后等待多长时间退出.
缺省为On,在大用户时<<必须>>设置为 Off.
2. MinSpareServers MaxSpareServers StartServers
此三项现均设置为50.由于httpd with mod_perl启动时需动态加载大量模块,
从启动到可服务需5秒以上,所以必须在启动时即创建适量后台.
3. MaxRequestsPerChild:
该项确定每个httpd进程在处理多少个请求后退出.
缺省值为0(即:无限)
现改为50,是为了防止单个httpd无休止地服务可能带来地内存泄陋问题
4. MaxClients:
该参数决定httpd在启动时提供服务地并发进程数
原来为600,现在改为128.
这项参数的数值与内存数量密切相关.计算公式为:

Total_RAM + Shared__RAM_per_Child * MaxClients
MaxClients = ---------------------------------------------
Max_Process_Size - 1

在安装mod_perl后,由于原来的cgi程序改为在httpd内部执行,
使得每个httpd在执行时的大小15M左右.其中有一部分是属于共享的.
在测试时发现如果MaxClients 还用600,则在40分钟内系统濒临DOWN机
5. PerlRequire startup.pl
这是为了在httpd初启动时加载常用的PERL模块,这样这些模块在后续的不同httpd
之间可以共享,从而使得每个httpd真正占用的内存量显著减少.
五.附录:
1.startup.pl
use strict;
#return if Apache->define(''syntax_check'');
# Extend @INC if needed
use lib qw(/dir/foo /dir/bar);

# Make sure we are in a sane environment.
$ENV{MOD_PERL} or die ""not running under mod_perl!"";
# For things in the ""/perl"" URL
use Apache::Registry;

# Load Perl modules of your choice here
# This code is interpreted *once* when the server starts
use LWP::UserAgent ();
#use Apache::DBI ();
#use DBI ();

# Tell me more about warnings
use Carp ();
$SIG{__WARN__} = &Carp::cluck;
# Load CGI.pm and call its compile() method to precompile
# (but not to import) its autoloaded methods.
use CGI ();
CGI->compile('':all'');
#####在我做升级时,必须加上底下这行,不知别人怎么样.
return 1;