[每周讨论专题]--第二期--Apache性能优化

王朝厨房·作者佚名  2007-01-05
宽屏版  字体: |||超大  

[b:43e1af0f0d][size=20:43e1af0f0d]每周讨论专题[/size:43e1af0f0d][/b:43e1af0f0d]【第二期】.......................................................点这里查看其他讨论专题

[b:43e1af0f0d][color=red:43e1af0f0d][size=24:43e1af0f0d]Apache性能优化[/size:43e1af0f0d][/color:43e1af0f0d][/b:43e1af0f0d]

[quote:43e1af0f0d]

本期讨论主旨为,如何让Apache更好的更高效的工作,要让它不吃草,还要它快快跑!!!

[/quote:43e1af0f0d]

seacaptain 回复于:2003-12-22 11:14:52

老大你先开个头吗

把你怎么优化apache的经验贴出来,大家分享

谢谢了

HonestQiao 回复于:2003-12-22 14:24:39

在 httpd.conf 中设置 "HostNameLookups off" 能避免针对每个访问者的 DNS 域名的反向查询。

对于繁忙的网站,在 httpd.conf 中设置 "MaxClients 250" 或者更高。这项设置让更多的 httpd 进程同时响应请求,并避免了处理器排队的情况发生。

缺保您的 Web 页面和 CGI 页面采用了浏览器缓冲技术。例如采用 mod_gzip 加速 Zope 和 Apache保持您的 Apache 苗条,编译那些仅仅需要的模块,在编译之前,修改 src/Configuration 文件,在那些不需要的模块之前用 # 号注释掉。

如果不需要流量日志,那么把 httpd.conf 中的 TransferLog 指向到 /dev/null/除非你确定使用 .htaccess 文件来控制一些目录的权限,否则设置 "AllowOverride None" ,这样就免去 Apache 在每个目录搜索 .htaccess 文件的劳役之苦。

不要让不需要的后台进程运行。

千万不要把页面或者日志文件写到网络磁盘上,例如 NFS。

不要让 Apache (httpd) 运行于 inetd 模式。

不要让 X Windows 运行在你的 Web 服务器上,用 Ctrl-Alt-Backspace 关闭 X 。

避免使用 SSI tag。在 CGI 脚本中:

文件 I/O:打开的文件数目越少越好。

Shell 命令:采用全路径来调用 shell 命令。

如果你的网站主要以 CGI 来驱动,那么请使用 mod_perl。

在你的 Web 页面目录中,不要让文件数超过 1000 个,文件越多花费在定位上的时间也越多。

在 Web 服务器上的图片越少越好,保证每个图片都经由图片压缩器运行。

采用另外一台服务器处理图片文件。

HonestQiao 回复于:2003-12-22 14:26:31

编译

修改src/include/httpd.h

代码:--------------------------------------------------------------------------------

#ifndef HARD_SERVER_LIMIT

#ifdef WIN32

#define HARD_SERVER_LIMIT 1024

#elif defined(NETWARE)

#define HARD_SERVER_LIMIT 2048

#else

#define HARD_SERVER_LIMIT 1024

#endif

#endif

--------------------------------------------------------------------------------

在configure前添加代码:--------------------------------------------------------------------------------

CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti"

--------------------------------------------------------------------------------例如代码:--------------------------------------------------------------------------------

CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure ..............

--------------------------------------------------------------------------------

注意,这里优化的是intel pentium pro以上处理器(i686)

如果你是i386,使用-m386

如果你是i486,使用-m486

如果你是i586,使用-mpentium

如果你是i686,使用-mpentiumpro

如果你是AMD CPU,使用-mcpu=k6

自行修改选项使用gmake代替make

以上为编译的优化

设置上的优化

httpd.conf代码:--------------------------------------------------------------------------------

Timeout 120

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 5

#超时及保持连接设置

MinSpareServers 5

MaxSpareServers 15

StartServers 8

#进程启动控制,过多不好,而且导致启动慢

MaxClients 512

#最大连接512,根据实际调整

MaxRequestsPerChild 1024

#每个进程1024只响应1024次,每响应1024就自动终止本身,并且启用新的进程

#这样可以避免一个进程占用的资源无法回收

HostnameLookups Off

#关掉连接进来的主机的名字lookup

--------------------------------------------------------------------------------减少不必要的modules,去掉不用的loadmodule,addmodule

另外,如果你是公网的一台服务器,而且对所有人开放允许连接,那么可以注释了httpd.conf里面所有order,allow,deny语句使用mod_perl代替perl,使用php的apache module代替php-cgi

编译

代码:--------------------------------------------------------------------------------

CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --without-innodb

--------------------------------------------------------------------------------注意,这里优化的是intel pentium pro以上处理器(i686)

如果你是i386,使用-m386

如果你是i486,使用-m486

如果你是i586,使用-mpentium

如果你是i686,使用-mpentiumpro

如果你是AMD CPU,使用-mcpu=k6

自行修改选项

如果你需要用到innodb表,请去掉最后的 --without-innodb

使用gmake代替make使用MySQL-MAX代替MySQL

以上为编译的优化MySQL的配置

my.cnf

my.cnf,在mysql的安装目录support-files下有几个范例,选一个适合自己的

另外还要修改一下my.cnf代码:--------------------------------------------------------------------------------

skip-locking

#log-bin

#去掉log

server-id = 1

skip-innodb

#去掉innodb支持

set-variable = thread_concurrency=4

#设置为你的cpu数目x2,例如,只有一个cpu,那么thread_concurrency=2

#有一个cpu,那么thread_concurrency=4

--------------------------------------------------------------------------------将你的表转换为MYISAM形式

MySQL就这样了,是没东西说的

另外,如果你不怕是用测试版,可以用mysql4来代替mysql3,性能会有提升的

只是mysql4还是Alpha版本

编译

代码:--------------------------------------------------------------------------------

CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --with-mysql --with-apxs=/apache1/bin/apxs --enable-trans-sid --disable-debug --enable-inline-optimization --enable-mbstring

--------------------------------------------------------------------------------注意,这里优化的是intel pentium pro以上处理器(i686)

如果你是i386,使用-m386

如果你是i486,使用-m486

如果你是i586,使用-mpentium

如果你是i686,使用-mpentiumpro

如果你是AMD CPU,使用-mcpu=k6

自行修改选项

使用gmake代替make优化

添加zend optimizer

添加zend accelerator

使用zend encoder unlimited来编译php源代码

mmap_static_module:mod_mmap_static.c

mod_mmap_static.so

mmap_static_module的作用是将部分 静态文件 存放在内核缓存

不过,要小心配置mmap,因为这个会导致系统不稳定,甚至当机。另外,似乎只有xNIX主机可以使用这个。首先必须loadmodule mod_mmap_static.so或者已经编译进httpd

确认module装载了后

httpd.conf 设置语法(建议放在所有addmodule的最后,如果你没用到addmodule,那么就放在所有loadmodule后面)MMapFile 文件1 文件2 .......由于必须是静态文件,那么适合放进mmap的文件是.htm .html .txt .js还有就是图片文件,除了这些,配置文件conf,.htaccess .htpasswd之类也可以需要注意的是,mmap提供文件的缓冲数有限,大概是1000个,并且单个文件的不要太大,所有动态的文件不要放进mmap,例如.php .cgi .pl等

IPphone 回复于:2003-12-24 10:22:54

[code:1:7762e73f6b]

root#CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure

CFLAGS=-O6 -mpentiumpro -fomit-frame-pointer: Command not found.

[/code:1:7762e73f6b]

这是哪个命令不行啊????

没像乔楚这样做过,尝试中……

必须用gmake 代替 make 吗??

oramind 回复于:2003-12-25 00:33:22

mod_gzip actually slows down cpu. it's a tradeoff between bandwidth and cpu. if you have plenty of bandwidth, don't use it.

hanyangz 回复于:2003-12-25 10:25:49

我用的是apache2.0

maxclient的树木最多可以设置多少?好象我改成512,但重新启动还是用256,是不是256是最大值啊??

xiaohua 回复于:2003-12-27 11:02:49

请问楼主:

第贴的 APACHE httpd.h 是什么版本的?我用 2.0.48 都没有这些数值

hanyangz 回复于:2004-01-02 11:21:16

maxclient默认的最大值为256,我在solaris sparc 9的机器上,如果没有重新编译,怎么都超不过这个值,重新编译的方法:

/usr/local/src/httpd-2.0.48/server/mpm/prefork/prefork.c

#define DEFAULT_SERVER_LIMIT 256

我这个值调大,我现在调整的是2000

然后安装:

./configure --prefix=/usr/local/apache2 --enable-so

make

make install

这样最大可以达到2000

xiaohua 回复于:2004-01-02 22:03:38

我将它,改到 8500 了

[img:e418d2a6f3]http://mail.qiangzhu.net/bbs/files/apache2.png[/img:e418d2a6f3]

:lol: :lol:

Bendy 回复于:2004-01-13 21:37:38

没有什么新意.

冷风 回复于:2004-01-14 15:23:58

iHero 回复于:2004-01-17 11:48:02

[quote:5833a9205d="hanyangz"]我用的是apache2.0

maxclient的树木最多可以设置多少?好象我改成512,但重新启动还是用256,是不是256是最大值啊??[/quote:5833a9205d]

下面的文章说的非常好!

http://www.cnfug.org/journal/3/02.html

zhangweibo 回复于:2004-01-27 21:55:33

我一般用mod_gzip和Zend.Performance.Suite+squid反向代理来提供网站的速度

mod_gzip 和ZPS安装是很简单的,squid的应用大家可看我以前贴的文章,也可到我的网站去看

hanyangz 回复于:2004-03-05 14:01:18

vi httpd-2.0.48/server/mpm/worker/worker.c

找到 #define DEFAULT_SERVER_LIMIT 16

将这个值调大,不高于20000都可以,调整的是 2560

然后cd httpd.2.0.48

./configure --prefix=/home/webadm --enable-so --with-mpm=worker

make

make install

理论上应该可以很大的提高系统性能,但没开始测试!

fxdfbl 回复于:2004-03-08 02:30:49

./configure --prefix=/home/webadm --enable-so --with-mpm=worker

我测试过这样的编译,理论上来说还是不错的说~~~但没有用,还是工作在prework下面~

hanyangz 回复于:2004-03-08 16:59:48

如果是bsd的操作系统好象是不行,他对线程的支持不好!

我用的是linux系统,还没开始正式用!

swingcoder 回复于:2004-04-11 11:03:55

[quote:4b40c9911c="fxdfbl"]./configure --prefix=/home/webadm --enable-so --with-mpm=worker

我测试过这样的编译,理论上来说还是不错的说~~~但没有用,还是工作在prework下面~[/quote:4b40c9911c]

谁有经验关于server-pool优化使用

prefork mpm

worker mpm

prechild mpm

这间应该如何配置????

swingcoder 回复于:2004-04-11 13:24:22

http://httpd.apache.org/docs-2.0/mod/worker.html

wangbin 回复于:2004-04-30 06:21:53

/usr/ports/www/apache2/work/httpd-2.0.49/include

wangbin 回复于:2004-04-30 06:26:51

/usr/ports/www/apache2/work/httpd-2.0.49/server/mpm/prefork

enhand#

akenlx 回复于:2005-03-27 19:28:00

server_limit 和 max_clients 什么关系呀,max是最大客户端连接数,但同时又有个limit。二者什么关系呢

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有