|
2003-10-22, 07:24 PM | #1 |
注册日期: 2003-10-22
帖子: 11,053
积分:6
精华:24
现金:14348金币
资产:29325305金币
|
Linux下 对Apache发掘性能
Apache的性能发掘 编译 修改src/include/httpd.h,使maxclients可以超过256限制 代码:-------------------------------------------------------------------------------- #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前添加 代码:-------------------------------------------------------------------------------- CC=gcc CFLAGS="-O6 -mcpu=pentiumpro" -------------------------------------------------------------------------------- 例如 代码:-------------------------------------------------------------------------------- CC=gcc CFLAGS="-O6 -mcpu=pentiumpro" ./configure .............. -------------------------------------------------------------------------------- 注意,这里优化的是intel pentium pro以上处理器(i686) 使用gmake代替make 编译安装后(make install),用 strip 将 httpd 和一些常用的 module 的符号去掉 代码:-------------------------------------------------------------------------------- strip bin/httpd strip libexec/*.so -------------------------------------------------------------------------------- 以上为编译的优化 减少不必要的modules,去掉不用的loadmodule,addmodule 另外,如果你是公网的一台服务器,而且对所有人开放允许连接,那么可以注释了httpd.conf里面所有order,allow,deny语句 使用mod_perl代替perl,使用php的apache module代替php-cgi编译 基于gcc2 代码:-------------------------------------------------------------------------------- CC=gcc CFLAGS="-mcpu=pentiumpro" CXX=gcc CXXFLAGS="-mcpu=pentiumpro -felide-constructors" ./configure --prefix=/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --without-debug --with-client-ldflags=-all-static -------------------------------------------------------------------------------- 基于gcc3 代码:-------------------------------------------------------------------------------- CC=gcc3 CFLAGS="-mcpu=pentiumpro" CXX=g++3 CXXFLAGS="-felide-constructors -mcpu=pentiumpro" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --without-bench --with-client-ldflags=-all-static -------------------------------------------------------------------------------- 使用gmake代替make 使用gmake install-strip安装 以上为编译的优化 MySQL的配置 my.cnf my.cnf,在mysql的安装目录share/mysql/下有几个范例,选一个适合自己的 另外还要修改一下my.cnf 代码:-------------------------------------------------------------------------------- skip-locking #log-bin #去掉log,提高性能 server-id = 1 skip-innodb skip-bdb #如果不用到bdb,innodb数据表,去掉bdb,innodb支持,节省内存 set-variable = thread_concurrency=4 #设置为你的cpu数目x2,例如,只有一个cpu,那么thread_concurrency=2 #有一个cpu,那么thread_concurrency=4 -------------------------------------------------------------------------------- 将你的表转换为MYISAM形式 另外,如果你不怕是用测试版,可以用mysql4来代替mysql3,性能会有提升的 只是mysql4还是Alpha版本 编译 代码:-------------------------------------------------------------------------------- CC=gcc CFLAGS="-O6 -mcpu=pentiumpro" CXX=g++ CXXFLAGS="-mcpu=pentiumpro -O6" ./configure --with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs --disable-debug --enable-inline-optimization -q-------------------------------------------------------------------------------- 使用gmake代替make gmake install后,手动strip libphp4.so,去处.so里面的符号 优化 1.使用zend系列 使用zend optimizer 使用zend accelerator 使用zend encoder 来编译php源代码 http://www.zend.com/ 2.使用php accelerator http://www.php-accelerator.co.uk/ 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等 mmap的效果明显 mysql,尽量使用socket来连接,因为使用tcp/ip会降低速度,增大系统开销 对于一个跑着httpd的系统,如果内存不大(512M)的mysql server 可以这样配置my.cnf set-variable = max_connections=500 set-variable = key_buffer=32M set-variable = max_allowed_packet=1M set-variable = table_cache=64 set-variable = sort_buffer=2M set-variable = record_buffer=1M set-variable = myisam_sort_buffer_size=16M skip-innodb skip-bdb #log-bin 而对于主要是mysql应用的,可以试用这个配置 set-variable = long_query_time=20 set-variable = join_buffer_size=1M set-variable = connect_timeout=20 set-variable = max_connect_errors=10 set-variable = max_connections=500 set-variable = key_buffer=128M set-variable = max_allowed_packet=4M set-variable = table_cache=1024 set-variable = sort_buffer=4M set-variable = record_buffer=1M set-variable = myisam_sort_buffer_size=64M set-variable = thread_cache=256 skip-innodb skip-bdb #log-bin 另外 php 连接 mysql 的 persistent connect 会造成有大量到 mysqld 的空闲连接 因为每启动一个连接都要时间和资源,而空闲连接过多则会导致当机,这样就要取消 pconnect 来维持系统稳定,当然性能会降低少许 对于apache,可以使用mod_gzip来大大减少网络的传输 mod_gzip for apache1 http://www.remotecommunications.com/apache/mod_gzip/ 和mod_gzip功能一样的apache module是mod_hs,可惜只有试用版本 对于一个重负荷的web server 正确设置 MinSpareServers MaxSpareServers StartServers 是非常重要 MinSpareServers <= StartServers <= MaxSpareServers Statservers为启动的时候要启动多少httpd,设的数值大于maxspareservers或者小于minspareservers都是没效果的 一个maxclients 500的server,不妨设置 MinSpareServers 30 MaxSpareServers 80 StartServers 50 而如果内存够大,而且maxclient 1024的,试试这个 MinSpareServers 50 MaxSpareServers 200 StartServers 80 |
|