歡迎您光臨本站 註冊首頁

mod_perl升級實驗

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  一.說明
0.實際環境是:在一台主機上承擔700台的虛擬主機,由於cgi程序對資源消耗太大導致性能不好;
現在使用mod_perl代替.
1.用mod_perl代替perl可提高perl腳本執行效率;增加php4支持可增加對.php3,.php的支持。
可以修改配置文件,使得原有的perl腳本,php3程序不做任何修改,減少了升級的工作量。
2.在perl.apache.org上提到多種mod_perl的方案,
如果哪位朋友作了實驗,能否告知?(zhaoch@hichina.com)我將不勝感激.
二.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;


[火星人 ] mod_perl升級實驗已經有298次圍觀

http://coctec.com/docs/program/show-post-72447.html