技术改变世界 阅读塑造人生! - shaogx.com

This string was altered by TechBlog\Plugins\Example.; This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

Apache性能优化

 Apache是目前Internet上使用最为广泛的Web服务器。它具有比商业Web服务器不遑多让的功能与速度,同时安装与设置也十分简单,正是这些特性让它成为市场占有率最高的Web服务器软件。不过Apache安装简单,并不意味着简单地安装就可以适用于绝大多数应用环境,在高负荷的Web站点,Apache还需要进行调整、优化......  优化方法  Apache的配置文件是httpd.conf。Windows下该文件位于Apache安装目录的Conf子目录下,RedHat Enterprise Linux AS 3.0 Update 2位于/etc/httpd/conf。通过调整该文件的某些参数,可以优化Apache的运行效率。  为了验证后文Apache参数的调整是否起作用,我们通常用Apache附带的ab(Apache Bench)对其进行压力测试。  ab最常用的语法格式是这样的:  ab -n XXX -c YYY -k http://hostname.port/path/filename  其中:  -n XXX: 表示最多进行XXX次测试。也就是下载filename文件XXX次。  -c YYY: 客户端并发连接个数。  -k:    启用HTTP KeepAlive功能。默认不启用KeepAlive功能。  比如我们要对http://hostname:port/file.com下载10000次进行测试,并发访问为60个,启用HTTP KeepAlive功能,则访问指令为:  ab -n 10000 -c 60 -k http://hostname:port/file.htm  测试平台  在本次优化过程中。笔者采用了两台电脑进行压力测试。其中一台为客户端,运行ab发送请求,另外一台为服务器,安装有Apache提供Web服务。  1.服务器配置  服务器端,笔者采用了较低端的配置。这样更容易通过ab测试看来调整参数后的效果:  CPU:      Intel Celeron 1.0GHz 内存:    512MB SRAM 100MHz 硬盘:    Maxtor 4D040H2 网卡:    D-Link DFE 530TX  服务器端笔者安装两种操作系统:Windows Server 2003 Enterprise Edition并升级到最新的Hotfix。Apache服务器版本为2.0.50;或者RedHat Enterprise Linux AS 3.0 Update 2。  2.客户端配置  为了使评测的瓶颈不在客户端,笔者客户端配置要比服务器端好,具体硬件配置如下:  CPU:      P4 3.0GHz 533MHz 打开了HT支持 内存:    512MB DDR 400 硬盘:    WD1200JB-00CRA1 网卡:    D-Link DFE 530TX  客户端安装有RedHat Enterprise Linux AS 3.0 Update 2。并利用其中的ab来进行性能测试。  通用优化技巧  对于Apache服务器来说,为了提高性能需要进行的某些参数调整具有通用性,也就是说只要采用了就可以使其性能更好。  1.关闭DNS和名字解析  * HostnameLookups on | off | double  Apache 1.3之前HostnameLookups默认是打开的。这样客户端在访问服务器时,服务器将要解析客户端的主机名,并将其保存在日志文件中。对客户端进行域名反向解析会大幅降低服务器速度,所以最好将其设置为Off。关闭指令如下:  HostnameLookups off  * UseCanonicalName on | off | dns  打开UseCanonicalName是Web服务器的标准做法。这是因为客户发送的大部分请求都是对本服务器的引用,打开该项设置就能使用ServerName和Port选项的设置内容构建完整的URL。如果将这个参数设置为Off,那么Apache将使用从客户请求中获得服务器名字和端口值,重新构建URL。  如果你不需要在Apache中架设虚拟主机,建议设置为:  UseCanonicalName on  2.关闭多余模块  Apache采用了模块化设计,管理员可以有选择地加载一些模块来加强服务器的功能。这些模块,可以在创建服务器时静态编译到服务器的二进制代码中,也可以编译成一些独立服务器程序的Dynamic Shared Objects(DSO)文件,在Apache启动的时候根据需要,动态加载。事实证明,不加载多余的模块总是可以提高Apache的性能。  Apache的DSO模块是在httpd.conf中以:  LoadModule access_module modules/mod_access.so  方式加载。当不需要某个模块时,只要在其前添加“#”,注释掉该行。  一般来说,不需要加载以下模块:  mod_include.so: 服务器端包含,是一种已经过时的技术。  mod_autoindex.so: 如果不希望Apache列目录显示,可以删除。  mod_access.so、mod_auth.so: 如果你不需要进行安全验证,也没有必要加载。  最好加载以下模块:  mod_dir.so: 用于定义缺省文档index.php、index.jsp等。  mod_log_config.so: 用于定义记录文件格式。  mod_mime.so: 定义文件类型的关联。  最后需要说明一点的是,并不是加载所有的模块都会降低Apache性能。比如mod_zip可以把文件压缩之后再传给客户端,这样就可以减少40%左右的网络流量,而mod_expires则可以减少10%左右的重复请求。  3.取消.htaccess验证  除非你确定需要使用.htaccess文件来控制客户端对相应目录的访问权限,否则设置“AllowOverride None”,可以免除Apache在每个目录搜索.htaccess文件之苦。  4.取消符号链接  FollowSymLinks允许使用符号连接,这将使用浏览器有可能访问文档根目录(DocumentRoot)之外的内容,并且只有符号连接的目的与符号连接本身为同一用户所拥有时(SymLinksOwnerMatch),才允许访问,这个设置将增加一些安全性,但将耗费Apache大量的资源。  笔者建议:  Options FollowSymLinks  但是不要启用SymLinksOwnerMatch。  5.打开KeepAlive支持  在HTTP 1.0中和Apache服务器的一次连接只能发出一次HTTP请求,而KeepAlive参数支持HTTP 1.1版本的一次连接,多次传输功能,这样就可以在一次连接中发出多个HTTP请求。从而避免对于同一个客户端需要打开不同的连接。很多请求通过同一个TCP连接来发送,可以节约网络和系统资源。  在Apache的配置文件httpd.conf中,设置:  KeepAlive on KeepAliveTimeout 15  这样就能限制每个连接的保持时间是15秒。在我们的评测中发现,打开KeepAlive之前,ab测试的数据为:  Requests per second:    201.32 [#/sec] (mean) Time per request:      298.031 [ms] (mean) Time per request:      4.967 [ms] (mean, across all concurrent requests) Transfer rate:          839.49 [Kbytes/sec] received  而打开KeepAlive支持之后,ab测试数据为:  Requests per second:    341.70 [#/sec] (mean) Time per request:      175.594 [ms] (mean) Time per request:      2.927 [ms] (mean, across all concurrent requests) Transfer rate:          1437.04 [Kbytes/sec] received  最能反应Apache服务器性能的Requests per second,即每秒完成的请求次数从201.32提升到341.70,提升幅度为70%。虽然在现实环境中,不可能有这么多的同一连接发出的请求,但启用KeepAlive确实在一定程度上可以提高Apache服务器的吞吐量和反应速度。  另外,可以设置:  MaxKeepAliveRequests 100  把MaxKeepAliveRequests设置的尽量大,可以在一次连接中进行更多的HTTP请求。但在我们的测试中还发现,把MaxKeepAliveRequests设置成1000,则评测的客户端容易出现“Send requesttimed out”的错误,所以具体数值还要根据自己的情形来设置。  参数决定性能  Apache除了可以通过一些常规方式进行优化外,还需要调整其运行参数,这样才能构建一个适合相应网络环境的Web服务。这些指令从两个级别对Apache进行了优化。  * 进程级(Process-level)  进程级的参数用来控制Apache相应的客户端请求的进程数Process(在Windows下称之为线程数,threads)。  * 协议级(Protocol-level)  协议级的指令则用来控制Apache与客户端的连接多久才自动断开。  由于Windows和Linux/UNIX设计原理的不同,所以进程级的指令根据Apache是工作在Linux/UNIX或者Windows下,而分成两种。  1.Linux下Apache性能优化  Linux下的Apache预设工作在prefork模式下(由每个进程处理连接请求),这种工作模式也是Apache 1.3系列的工作模式。如果你需要其工作在其他模式下,则需要手工编译源代码来实现:  ./configure --prefix=/usr/local/apache-2.0.50 --with-mpm=worker --enable-include && make && make install  Linux下进程级的Apache调整参数包括以下五个。  * StartServers  该参数决定Linux启动时,自动打开的Apache服务器的数目。它对Apache服务器的性能没有太大的影响。因为如果MinSpareServers设置的比较大,Apache服务器进程数会马上调整到不小于MinSpareServers的数目。  在Linux下,我们可以通过:  ps aux |grep httpd  来查看当前打开的Apache服务进程数。  * MinspareServers  该参数用于配置在任何时候可用的最小Apache进程个数。一般情况下,当目前可用的Apache进程数不能满足需求时,Apache会自动打开新进程以服务客户。所以设置MinspareServers为较大的值只是为了让在比较繁忙的Web环境,让Apache可以尽快地满足客户端的访问需求。对于每天有百万访问量的网站来说,下面的数值是比较合适的:  MinspareServers 32  * MaxSpareServers  较大的MinSpareServers可以保证Apache有较快的反应速度,过大的MinSpareServers又会占用更多的系统内存。如果你的系统内存不是很充足或者运行有其他的服务,把MaxSpareServers设置小一些可以为其他服务空出一些内存。当空闲Apache进程超过MaxSpareServers指定的数值时,Apache主进程会杀掉多余的空闲进程而保持空闲进程在MaxSpareServers指定的数值。  对于每天百万访问量的网站来说,配置大容量的内容,并且设置如下的值是比较合适的:  MaxSpareServers 64  * MaxClients  服务器的处理能力毕竟是有限的,不可能同时处理无限多的连接请求。参数MaxClients就用于规定服务器支持的最多并发访问的客户数。  如果MaxClients设置得过大,系统在繁忙时不得不在过多的进程之间来回切换为更多的客户服务。这样对每个客户的反应就会变慢;如果设置得过小,系统繁忙时就会拒绝客户连接请求。  我们的设想原则是,当服务器性能较高时,可以适当增加这个值的设置。如果繁忙出现拒绝访问现象,说明需要升级服务器硬件了。  如果你不在意访问速度,或者认为反应速度慢也总比拒绝连接好,可以把该值设置大一些。  * MaxRequestsPerChild  当设置KeepAlive为off时,Apache服务器是用单独的子进程为一次连接服务,这样,每次连接都需要生成、关闭子进程,这些额外的操作浪费了计算机的大量处理能力。最好的方式是一个子进程可以为多次连接请求服务。  但子进程在接受访问请求时,需要不断地申请和释放内存,次数多了就会造成内存垃圾,影响系统稳定性。为了解决这个问题,可以规定每一个子进程处理的最大请求数,超过此数值,就让该子进程退出,再从原始的httpd进程中重新复制一个干净的副本,从而提高系统的稳定性。  第个子进程能够处理服务请求的最大次数由MaxRequestsPerChild定义。RedHat Enterprise Linux AS 3.0 Update 2缺省的设置值为1000这个值比较适合(设置为0支持每个副本进行无限次的服务处理)。  在我们的测试过程中发现,RedHat Enterprise Linux AS 3.0 Update 2下默认配置的Apache并不能很好地应付大负荷站点。我们需要打开KeepAlive,并加大StartServers、MinSpareServers、MaxSpareServers和MaxClients的数值。这些参数对于Apache性能的改善有很大的影响。  小知识: RedHat Enterprise Linux AS 3.0 Update 2最大MaxClients只能设置到256。如果你需要设置其为更高,需要在MaxClients前面添加: ServerLimit xxx 其中xxx不能少于MaxClients的数值。该设置方法适用于Apache 2.0系列。  2.Windows下Apache优化  Windows下,Apache 2.0经过了全新的设计,采用多线程的方式(work)运行。这种运行方式,理论上比Linux/UNIX的Perfork运行模式有更好的性能。  Work模式下由单个控制进程负责子进程的建立。每个子进程可以建立由ThreadsPerChild指定的固定数量的线程。由独立的线程监听并处理到来的连接。  在Windows下可以执行“Apache -l”。查看当前工作模式,如果显示“mpm_winnt.c”,则表示Apache工作在多线程模式下;在Linux下执行“httpd -l”看到“prefork.c”表示工作在子进程模式下。  其配置语句是:   StartServers          2 MaxClients          150 MinSpareThreads      25 MaxSpareThreads      75          ThreadsPerChild      25 MaxRequestsPerChild    0   Apache力图维持一个备用的服务线程池,让客户端无须等待线程/进程的建立即可得到处理。最初建立的进程数由StartServers指定。然后Apache会不停地检测所有Apache进程中空闲线程的总数,并新建或结束进程使总数维持在MinSpareThreads和MaxSpareThreads所指定的范围以内。但同时可以得到处理的客户端的最大数量又取决于MaxClients指令,而进程建立的最大数量取决于ServerLimit指令。三者之间的关系为:  ServerLimit*ThreadsPerChild >=MaxClients ... 全文

Apache Apache优化 Apache性能优化

apache优化

查看Apache的并发请求数及其TCP连接状态:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'实时查看apache连接数watch  -n 1 -d 'pgrep httpd  | wc -l'本文出自 “Create One Eternal Love” 博客,请务必保留此出处http://yijiaxin.blog.51cto.com/2973774/806051... 全文

apache apache优化 职场 休闲

Apache服务器优化

ExtendedStatus On 因为写入额外的时间标志,设off。 MPM:worker-多进程多线程新型设计,适合高流量服务,但是不稳定,对象php之类支持非常差,不推荐, prefork-稳定,无线程,占用较多内存。 HostnameLookups off 关掉,这样少一dns查询,日志处理可以另外用软件。注释LoadMoule指令中不要的模块。 一般说来,不需要的模块包括: LoadModule auth_basic_module modules/mod_auth_basic.so #LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule authn_file_module modules/mod_authn_file.so #LoadModule authn_alias_module modules/mod_authn_alias.so LoadModule authn_anon_module modules/mod_authn_anon.so #LoadModule authn_dbm_module modules/mod_authn_dbm.so LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule authz_owner_module modules/mod_authz_owner.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so #LoadModule authz_dbm_module modules/mod_authz_dbm.so LoadModule authz_default_module modules/mod_authz_default.so LoadModule ldap_module modules/mod_ldap.so #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule include_module modules/mod_include.so LoadModule log_config_module modules/mod_log_config.so LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so LoadModule ext_filter_module modules/mod_ext_filter.so LoadModule mime_magic_module modules/mod_mime_magic.so LoadModule expires_module modules/mod_expires.so LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so LoadModule usertrack_module modules/mod_usertrack.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule mime_module modules/mod_mime.so #LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule info_module modules/mod_info.so #LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so LoadModule actions_module modules/mod_actions.so LoadModule speling_module modules/mod_speling.so #比如:需要在~/username/下调试php可以将 #LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so LoadModule rewrite_module modules/mod_rewrite.so #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule cache_module modules/mod_cache.so LoadModule suexec_module modules/mod_suexec.so LoadModule disk_cache_module modules/mod_disk_cache.so LoadModule file_cache_module modules/mod_file_cache.so LoadModule mem_cache_module modules/mod_mem_cache.so #cgi程序用到,象awstats之类需要用到 LoadModule cgi_module modules/mod_cgi.so LoadModule version_module modules/mod_version.so... 全文

apache 职场 休闲 apache优化

Apache安装apr和apr

安装Apache的时候,为什么要安装apr和apr-util呢  要测APR给tomcat带来的好处最好的方法是在慢速网络上(模 拟Internet),将Tomcat线程数开到300以上的水平,然后模 拟一大堆并发请求。如果不配APR,基本上300个线程狠快就会 用满,以后的请求就只好等待。但是配上APR之后,并发的线 程数量明显下降,从原来的300可能会马上下降到只有几十, 新的请求会毫无阻塞的进来。 APR对于Tomcat最大的作用就是socket调度。  你在局域网环境测,就算是400个并发,也是一瞬间就处理/传 输完毕,但是在真实的Internet环境下,页面处理时间只占 ... 全文

Apache安装apr和apr-util作用 休闲 Apache性能优化 tomcat性能优化 职场

apache的配置优化

【APACHE的工作方式】prefork模式(默认)这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。... 全文

apache 优化

apache优化配置

apache优化配置###=========httpd.conf begin===================##Apache主配置文件##设置服务器的基础目录,默认为Apache安装目录ServerRoot "/usr/local/apache-2.2.6"##设置服务器监听的IP和端口Listen 80##设置管理员邮件地址##设置服务器用于辨识自己的主机名和端口号ServerName www.uenu.com:80###设置动态加载的DSO模块##如果需要提供基于文本文件的认证,加载此模块,否则注释掉LoadModule authn_file_module modules/mod_authn_file.so##如果需要提供基于DBM文件的认证,加载此模块,否则注释掉#LoadModule authn_dbm_module modules/mod_authn_dbm.so##如果需要提供匿名用户认证,加载此模块,否则注释掉#LoadModule authn_anon_module modules/mod_authn_anon.so##如果需要提供基于SQL数据库的认证,加载此模块,否则注释掉#LoadModule authn_dbd_module modules/mod_authn_dbd.so##如果需要在未正确配置认证模块的情况下简单拒绝一切认证信息,加载此模块,否则注释掉LoadModule authn_default_module modules/mod_authn_default.so##此模块提供基于主机名、IP地址、请求特征的访问控制,Allow、Deny指令需要,推荐加载。LoadModule authz_host_module modules/mod_authz_host.so##如果需要使用纯文本文件为组提供授权支持,加载此模块,否则注释掉#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so##如果需要提供基于每个用户的授权支持,加载此模块,否则注释掉LoadModule authz_user_module modules/mod_authz_user.so##如果需要使用DBM文件为组提供授权支持,加载此模块,否则注释掉#LoadModule authz_dbm_module modules/mod_authz_dbm.so##如果需要基于文件的所有者进行授权,加载此模块,否则注释掉#LoadModule authz_owner_module modules/mod_authz_owner.so##如果需要在未正确配置授权支持模块的情况下简单拒绝一切授权请求,加载此模块,否则注释掉LoadModule authz_default_module modules/mod_authz_default.so##如果需要提供基本的HTTP认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块LoadModule auth_basic_module modules/mod_auth_basic.so##如果需要提供HTTP MD5摘要认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块#LoadModule auth_digest_module modules/mod_auth_digest.so##此模块提供文件描述符缓存支持,从而提高Apache性能,推荐加载,但请小心使用LoadModule file_cache_module modules/mod_file_cache.so##此模块提供基于URI键的内容动态缓存(内存或磁盘),从而提高Apache性能,必须与mod_disk_cache/mod_mem_cache同时使用,推荐加载LoadModule cache_module modules/mod_cache.so##此模块为mod_cache提供基于磁盘的缓存管理,推荐加载LoadModule disk_cache_module modules/mod_disk_cache.so##此模块为mod_cache提供基于内存的缓存管理,推荐加载LoadModule mem_cache_module modules/mod_mem_cache.so##如果需要管理SQL数据库连接,为需要数据库功能的模块提供支持,加载此模块,否则注释掉(推荐)#LoadModule dbd_module modules/mod_dbd.so##此模块将所有I/O操作转储到错误日志中,会导致在日志中写入及其海量的数据,只建议在发现问题并进行调试的时候使用#LoadModule dumpio_module modules/mod_dumpio.so##如果需要使用外部程序作为过滤器,加载此模块(不推荐),否则注释掉#LoadModule ext_filter_module modules/mod_ext_filter.so##如果需要实现服务端包含文档(SSI)处理,加载此模块(不推荐),否则注释掉#LoadModule include_module modules/mod_include.so##如果需要根据上下文实际情况对输出过滤器进行动态配置,加载此模块,否则注释掉LoadModule filter_module modules/mod_filter.so##如果需要服务器在将输出内容发送到客户端以前进行压缩以节约带宽,加载此模块(推荐),否则注释掉LoadModule deflate_module modules/mod_deflate.so##如果需要记录日志和定制日志文件格式,加载此模块(推荐),否则注释掉LoadModule log_config_module modules/mod_log_config.so##如果需要对每个请求的输入/输出字节数以及HTTP头进行日志记录,加载此模块,否则注释掉#LoadModule logio_module modules/mod_logio.so##如果允许Apache修改或清除传送到CGI脚本和SSI页面的环境变量,加载此模块,否则注释掉LoadModule env_module modules/mod_env.so##如果允许通过配置文件控制HTTP的"Expires:"和"Cache-Control:"头内容,加载此模块(推荐),否则注释掉LoadModule expires_module modules/mod_expires.so##如果允许通过配置文件控制任意的HTTP请求和应答头信息,加载此模块,否则注释掉LoadModule headers_module modules/mod_headers.so##如果需要实现RFC1413规定的ident查找,加载此模块(不推荐),否则注释掉#LoadModule ident_module modules/mod_ident.so##如果需要根据客户端请求头字段设置环境变量,加载此模块,否则注释掉LoadModule setenvif_module modules/mod_setenvif.so##此模块是mod_proxy的扩展,提供Apache JServ Protocol支持,只在必要时加载#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so##此模块是mod_proxy的扩展,提供负载均衡支持,只在必要时加载#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so##如果需要根据文件扩展名决定应答的行为(处理器/过滤器)和内容(MIME类型/语言/字符集/编码),加载此模块,否则注释掉LoadModule mime_module modules/mod_mime.so##如果允许Apache提供DAV协议支持,加载此模块,否则注释掉#LoadModule dav_module modules/mod_dav.so##此模块生成描述服务器状态的Web页面,只建议在追踪服务器性能和问题时加载#LoadModule status_module modules/mod_status.so##如果需要自动对目录中的内容生成列表(类似于"ls"或"dir"命令),加载此模块(会带来安全问题,不推荐),否则注释掉#LoadModule autoindex_module modules/mod_autoindex.so##如果需要服务器发送自己包含HTTP头内容的文件,加载此模块,否则注释掉#LoadModule asis_module modules/mod_asis.so##如果需要生成Apache配置情况的Web页面,加载此模块(会带来安全问题,不推荐),否则注释掉#LoadModule info_module modules/mod_info.so##如果需要在非线程型MPM(prefork)上提供对CGI脚本执行的支持,加载此模块,否则注释掉#LoadModule cgi_module modules/mod_cgi.so##此模块在线程型MPM(worker)上用一个外部CGI守护进程执行CGI脚本,如果正在多线程模式下使用CGI程序,推荐替换mod_cgi加载,否则注释掉#LoadModule cgid_module modules/mod_cgid.so##此模块为mod_dav访问服务器上的文件系统提供支持,如果加载mod_dav,则也应加载此模块,否则注释掉#LoadModule dav_fs_module modules/mod_dav_fs.so##如果需要提供大批量虚拟主机的动态配置支持,加载此模块,否则注释掉#LoadModule vhost_alias_module modules/mod_vhost_alias.so##如果需要提供内容协商支持(从几个有效文档中选择一个最匹配客户端要求的文档),加载此模块(推荐),否则注释掉LoadModule negotiation_module modules/mod_negotiation.so##如果需要指定目录索引文件以及为目录提供"尾斜杠"重定向,加载此模块(推荐),否则注释掉LoadModule dir_module modules/mod_dir.so##如果需要处理服务器端图像映射,加载此模块,否则注释掉#LoadModule imagemap_module modules/mod_imagemap.so##如果需要针对特定的媒体类型或请求方法执行CGI脚本,加载此模块,否则注释掉#LoadModule actions_module modules/mod_actions.so##如果希望服务器自动纠正URL中的拼写错误,加载此模块(推荐),否则注释掉LoadModule speling_module modules/mod_speling.so##如果允许在URL中通过"/~username"形式从用户自己的主目录中提供页面,加载此模块,否则注释掉#LoadModule userdir_module modules/mod_userdir.so##此模块提供从文件系统的不同部分到文档树的映射和URL重定向,推荐加载LoadModule alias_module modules/mod_alias.so##如果需要基于一定规则实时重写URL请求,加载此模块(推荐),否则注释掉LoadModule rewrite_module modules/mod_rewrite.so ##设置子进程的用户和组<IfModule !mpm_netware_module>User daemonGroup daemon</IfModule>##设置默认WEB文档根目录DocumentRoot "/usr/local/apache-2.2.6/htdocs"##设置WEB文档根目录的默认属性<Directory />Options FollowSymLinksAllowOverride NoneOrder deny,allowDeny from all</Directory>##设置DocumentRoot指定目录的属性<Directory "/usr/local/apache-2.2.6/htdocs">Options FollowSymLinksAllowOverride NoneOrder allow,denyAllow from all</Directory>##设置默认目录资源列表文件<IfModule dir_module>DirectoryIndex index.html</IfModule>##拒绝对.ht开头文件的访问,以保护.htaccess文件<FilesMatch "^\.ht">Order allow,denyDeny from allSatisfy All</FilesMatch>##指定错误日志文件ErrorLog logs/error_log##指定记录到错误日志的消息级别LogLevel warn<IfModule log_config_module>##定义访问日志的格式LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" common<IfModule logio_module>LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio</IfModule>##指定访问日志及使用的格式CustomLog logs/access_log combined</IfModule>##设定默认CGI脚本目录及别名<IfModule alias_module>ScriptAlias /cgi-bin/ "/usr/local/apache-2.2.6/cgi-bin/"</IfModule>##在以线程式MPM(worker)运行的Apache中设置用来与CGI守护进程通信的套接字文件名前缀<IfModule cgid_module>Scriptsock logs/cgisock</IfModule>##设定默认CGI脚本目录的属性<Directory "/usr/local/apache-2.2.6/cgi-bin">AllowOverride NoneOptions NoneOrder allow,denyAllow from all</Directory>##设定默认MIME内容类型DefaultType text/plain<IfModule mime_module>##指定MIME类型映射文件TypesConfig conf/mime.types##增加.Z .tgz的类型映射AddType application/x-compress .ZAddType application/x-gzip .gz .tgz</IfModule>##启用内存映射EnableMMAP on##使用操作系统内核的sendfile支持来将文件发送到客户端EnableSendfile on##指定多路处理模块(MPM)配置文件并将其附加到主配置文件Include conf/extra/httpd-mpm.conf##指定多语言错误应答配置文件并将其附加到主配置文件Include conf/extra/httpd-multilang-errordoc.conf##指定目录列表配置文件并将其附加到主配置文件#Include conf/extra/httpd-autoindex.conf##指定语言配置文件并将其附加到主配置文件Include conf/extra/httpd-languages.conf##指定用户主目录配置文件并将其附加到主配置文件#Include conf/extra/httpd-userdir.conf##指定用于服务器信息和状态显示的配置文件并将其附加到主配置文件#Include conf/extra/httpd-info.conf##指定提供Apache文档访问的配置文件并将其附加到配置文件#Include conf/extra/httpd-manual.conf##指定DAV配置文件并将其附加到主配置文件#Include conf/extra/httpd-dav.conf##指定与Apache服务自身相关的配置文件并将其附加到主配置文件Include conf/extra/httpd-default.conf##指定mod_deflate压缩模块配置文件并将其附加到主配置文件Include conf/extra/httpd-deflate.conf##指定mod_expires模块配置文件并将其附加到主配置文件Include conf/extra/httpd-expires.conf##指定虚拟主机配置文件并将其附加到主配置文件#Include conf/extra/httpd-vhosts.conf##指定SSL配置文件并将其附加到主配置文件Include conf/extra/httpd-ssl.conf##SSL默认配置<IfModule ssl_module>SSLRandomSeed startup builtinSSLRandomSeed connect builtin</IfModule>###==========httpd.conf end=================== 4.3.3 配置多路处理模块(MPM)编辑多路处理模块配置文件:vi /usr/local/apache-2.2.6/conf/extra/httpd-mpm.conf 如果使用prefork多路处理模块,按下面的提示修改:###=============httpd-mpm.conf prefork begin===================##设置prefork多路处理模块<IfModule mpm_prefork_module>StartServers 5MinSpareServers 5MaxSpareServers 10ServerLimit    4000MaxClients 4000MaxRequestsPerChild 0</IfModule>###=============httpd-mpm.conf prefork end===================   指令说明:  StartServers:设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。  MinSpareServers:设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。MaxSpareServers:设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。ServerLimit:服务器允许配置的进程数上限。只有在你需要将MaxClients设置成高于默认值256的时候才需要使用。要将此指令的值保持和MaxClients一样。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。  MaxClients:用于伺服客户端请求的最大请求数量(最大子进程数),任何超过MaxClients限制的请求都将进入等候队列。默认值是256,如果要提高这个值必须同时提高ServerLimit的值。笔者建议将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。MaxRequestsPerChild:设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏无限进行而耗尽内存;给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。如果设置为非零值,笔者建议设为10000-30000之间的一个值。公式:   MaxClients<=ServerLimit  如果使用worker多路处理模块,按下面的提示修改:###=============httpd-mpm.conf worker begin===================##设置worker多路处理模块<IfModule mpm_worker_module>StartServers 5ServerLimit 20ThreadLimit 200MaxClients 4000MinSpareThreads 25MaxSpareThreads 250ThreadsPerChild 200MaxRequestsPerChild 0</IfModule>###=============httpd-mpm.conf worker end===================指令说明:StartServers:设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。ServerLimit:服务器允许配置的进程数上限。只有在你需要将MaxClients和ThreadsPerChild设置成需要超过默认值16个子进程的时候才需要使用这个指令。不要将该指令的值设置的比MaxClients 和ThreadsPerChild需要的子进程数量高。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。ThreadLimit: 设置每个子进程可配置的线程数ThreadsPerChild上限,该指令的值应当和ThreadsPerChild可能达到的最大值保持一致。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。MaxClients:用于伺服客户端请求的最大接入请求数量(最大线程数)。任何超过MaxClients限制的请求都将进入等候队列。默认值是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加 ServerLimit的值。笔者建议将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。MinSpareThreads:最小空闲线程数,默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。MaxSpareThreads:设置最大空闲线程数。默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和。 ThreadsPerChild:每个子进程建立的线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。每个子进程所拥有的所有线程的总数要足够大,以便可以处理可能的请求高峰。MaxRequestsPerChild:设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏无限进行而耗尽内存;给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。如果设置为非零值,笔者建议设为10000-30000之间的一个值。公式:ThreadLimit >= ThreadsPerChildMaxClients <= ServerLimit * ThreadsPerChild 必须是ThreadsPerChild的倍数MaxSpareThreads >= MinSpareThreads+ThreadsPerChild 4.3.4 配置Apache服务器默认设置编辑Apache服务器默认设置文件:vi /usr/local/apache-2.2.6/conf/extra/httpd-default.conf 按下面的提示修改:###=============httpd-default.conf begin===================##Apache默认设置文件Timeout 120KeepAlive OffMaxKeepAliveRequests 100KeepAliveTimeout 5UseCanonicalName OffAccessFileName .htaccessServerTokens ProdServerSignature OffHostnameLookups Off###=============httpd-default.conf end====================指令说明:  Timeout:设置服务器在断定请求失败前等待的秒数。默认值300。KeepAlive:设置是否启用HTTP持久链接,On 代表打开,Off 代表关闭。如果用于同一页面包含大量静态文件的应用,设置为On,以提高性能;如果用于主要为动态页面的应用,设置为Off,以节约内存资源;如果服务器前跑有squid或者其它七层设备,设置为On。MaxKeepAliveRequests:限制当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。笔者建议将此值设为100-500之间的一个值,以确保最优的服务器性能。  KeepAliveTimeout:设置持久链接中服务器在两次请求之间等待的秒数。对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的进程就越多。UseCanonicalName:配置服务器如何确定它自己的域名,可选值为On | Off | DNS。DNS用于为大量基于IP的虚拟主机支持那些古董级的不提供"Host:"头的浏览器使用。笔者建议设置为Off。AccessFileName:设置分布式配置文件的名字,默认为.htaccess。如果为某个目录启用了分布式配置文件功能,那么在向客户端返回其中的文档时,服务器将在这个文档所在的各级目录中查找此配置文件,因此会带来性能问题,笔者建议关闭分布式配置文件功能。ServerTokens:控制服务器回应给客户端的"Server:"应答头是否包含关于服务器操作系统类型和编译进的模块描述信息,同时还控制着ServerSignature指令的显示内容。可选值为Full | OS | Minor | Minimal | Major | Prod。笔者建议设置为显示最少信息的Prod。ServerSignature:配置服务器生成页面的页脚,可选值为On | Off | EMail。采用On会简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName,而EMail设置会额外创建一个指向ServerAdmin的"mailto:"部分。建议使用默认值Off。HostnameLookups:设置是否启用对客户端IP的DNS查找,可选值为On | Off | Double。DNS查询会造成明显的时间消耗,建议设置为Off。###=========httpd.conf begin===================##Apache主配置文件##设置服务器的基础目录,默认为Apache安装目录ServerRoot "/usr/local/apache-2.2.6"##设置服务器监听的IP和端口Listen 80##设置管理员邮件地址##设置服务器用于辨识自己的主机名和端口号ServerName www.uenu.com:80###设置动态加载的DSO模块##如果需要提供基于文本文件的认证,加载此模块,否则注释掉LoadModule authn_file_module modules/mod_authn_file.so##如果需要提供基于DBM文件的认证,加载此模块,否则注释掉#LoadModule authn_dbm_module modules/mod_authn_dbm.so##如果需要提供匿名用户认证,加载此模块,否则注释掉#LoadModule authn_anon_module modules/mod_authn_anon.so##如果需要提供基于SQL数据库的认证,加载此模块,否则注释掉#LoadModule authn_dbd_module modules/mod_authn_dbd.so##如果需要在未正确配置认证模块的情况下简单拒绝一切认证信息,加载此模块,否则注释掉LoadModule authn_default_module modules/mod_authn_default.so##此模块提供基于主机名、IP地址、请求特征的访问控制,Allow、Deny指令需要,推荐加载。LoadModule authz_host_module modules/mod_authz_host.so##如果需要使用纯文本文件为组提供授权支持,加载此模块,否则注释掉#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so##如果需要提供基于每个用户的授权支持,加载此模块,否则注释掉LoadModule authz_user_module modules/mod_authz_user.so##如果需要使用DBM文件为组提供授权支持,加载此模块,否则注释掉#LoadModule authz_dbm_module modules/mod_authz_dbm.so##如果需要基于文件的所有者进行授权,加载此模块,否则注释掉#LoadModule authz_owner_module modules/mod_authz_owner.so##如果需要在未正确配置授权支持模块的情况下简单拒绝一切授权请求,加载此模块,否则注释掉LoadModule authz_default_module modules/mod_authz_default.so##如果需要提供基本的HTTP认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块LoadModule auth_basic_module modules/mod_auth_basic.so##如果需要提供HTTP MD5摘要认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块#LoadModule auth_digest_module modules/mod_auth_digest.so##此模块提供文件描述符缓存支持,从而提高Apache性能,推荐加载,但请小心使用LoadModule file_cache_module modules/mod_file_cache.so##此模块提供基于URI键的内容动态缓存(内存或磁盘),从而提高Apache性能,必须与mod_disk_cache/mod_mem_cache同时使用,推荐加载LoadModule cache_module modules/mod_cache.so##此模块为mod_cache提供基于磁盘的缓存管理,推荐加载LoadModule disk_cache_module modules/mod_disk_cache.so##此模块为mod_cache提供基于内存的缓存管理,推荐加载LoadModule mem_cache_module modules/mod_mem_cache.so##如果需要管理SQL数据库连接,为需要数据库功能的模块提供支持,加载此模块,否则注释掉(推荐)#LoadModule dbd_module modules/mod_dbd.so##此模块将所有I/O操作转储到错误日志中,会导致在日志中写入及其海量的数据,只建议在发现问题并进行调试的时候使用#LoadModule dumpio_module modules/mod_dumpio.so##如果需要使用外部程序作为过滤器,加载此模块(不推荐),否则注释掉#LoadModule ext_filter_module modules/mod_ext_filter.so##如果需要实现服务端包含文档(SSI)处理,加载此模块(不推荐),否则注释掉#LoadModule include_module modules/mod_include.so##如果需要根据上下文实际情况对输出过滤器进行动态配置,加载此模块,否则注释掉LoadModule filter_module modules/mod_filter.so##如果需要服务器在将输出内容发送到客户端以前进行压缩以节约带宽,加载此模块(推荐),否则注释掉LoadModule deflate_module modules/mod_deflate.so##如果需要记录日志和定制日志文件格式,加载此模块(推荐),否则注释掉LoadModule log_config_module modules/mod_log_config.so##如果需要对每个请求的输入/输出字节数以及HTTP头进行日志记录,加载此模块,否则注释掉#LoadModule logio_module modules/mod_logio.so##如果允许Apache修改或清除传送到CGI脚本和SSI页面的环境变量,加载此模块,否则注释掉LoadModule env_module modules/mod_env.so##如果允许通过配置文件控制HTTP的"Expires:"和"Cache-Control:"头内容,加载此模块(推荐),否则注释掉LoadModule expires_module modules/mod_expires.so##如果允许通过配置文件控制任意的HTTP请求和应答头信息,加载此模块,否则注释掉LoadModule headers_module modules/mod_headers.so##如果需要实现RFC1413规定的ident查找,加载此模块(不推荐),否则注释掉#LoadModule ident_module modules/mod_ident.so##如果需要根据客户端请求头字段设置环境变量,加载此模块,否则注释掉LoadModule setenvif_module modules/mod_setenvif.so##此模块是mod_proxy的扩展,提供Apache JServ Protocol支持,只在必要时加载#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so##此模块是mod_proxy的扩展,提供负载均衡支持,只在必要时加载#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so##如果需要根据文件扩展名决定应答的行为(处理器/过滤器)和内容(MIME类型/语言/字符集/编码),加载此模块,否则注释掉LoadModule mime_module modules/mod_mime.so##如果允许Apache提供DAV协议支持,加载此模块,否则注释掉#LoadModule dav_module modules/mod_dav.so##此模块生成描述服务器状态的Web页面,只建议在追踪服务器性能和问题时加载#LoadModule status_module modules/mod_status.so##如果需要自动对目录中的内容生成列表(类似于"ls"或"dir"命令),加载此模块(会带来安全问题,不推荐),否则注释掉#LoadModule autoindex_module modules/mod_autoindex.so##如果需要服务器发送自己包含HTTP头内容的文件,加载此模块,否则注释掉#LoadModule asis_module modules/mod_asis.so##如果需要生成Apache配置情况的Web页面,加载此模块(会带来安全问题,不推荐),否则注释掉#LoadModule info_module modules/mod_info.so##如果需要在非线程型MPM(prefork)上提供对CGI脚本执行的支持,加载此模块,否则注释掉#LoadModule cgi_module modules/mod_cgi.so##此模块在线程型MPM(worker)上用一个外部CGI守护进程执行CGI脚本,如果正在多线程模式下使用CGI程序,推荐替换mod_cgi加载,否则注释掉#LoadModule cgid_module modules/mod_cgid.so##此模块为mod_dav访问服务器上的文件系统提供支持,如果加载mod_dav,则也应加载此模块,否则注释掉#LoadModule dav_fs_module modules/mod_dav_fs.so##如果需要提供大批量虚拟主机的动态配置支持,加载此模块,否则注释掉#LoadModule vhost_alias_module modules/mod_vhost_alias.so##如果需要提供内容协商支持(从几个有效文档中选择一个最匹配客户端要求的文档),加载此模块(推荐),否则注释掉LoadModule negotiation_module modules/mod_negotiation.so##如果需要指定目录索引文件以及为目录提供"尾斜杠"重定向,加载此模块(推荐),否则注释掉LoadModule dir_module modules/mod_dir.so##如果需要处理服务器端图像映射,加载此模块,否则注释掉#LoadModule imagemap_module modules/mod_imagemap.so##如果需要针对特定的媒体类型或请求方法执行CGI脚本,加载此模块,否则注释掉#LoadModule actions_module modules/mod_actions.so##如果希望服务器自动纠正URL中的拼写错误,加载此模块(推荐),否则注释掉LoadModule speling_module modules/mod_speling.so##如果允许在URL中通过"/~username"形式从用户自己的主目录中提供页面,加载此模块,否则注释掉#LoadModule userdir_module modules/mod_userdir.so##此模块提供从文件系统的不同部分到文档树的映射和URL重定向,推荐加载LoadModule alias_module modules/mod_alias.so##如果需要基于一定规则实时重写URL请求,加载此模块(推荐),否则注释掉LoadModule rewrite_module modules/mod_rewrite.so ##设置子进程的用户和组<IfModule !mpm_netware_module>User daemonGroup daemon</IfModule>##设置默认WEB文档根目录DocumentRoot "/usr/local/apache-2.2.6/htdocs"##设置WEB文档根目录的默认属性<Directory />Options FollowSymLinksAllowOverride NoneOrder deny,allowDeny from all</Directory>##设置DocumentRoot指定目录的属性<Directory "/usr/local/apache-2.2.6/htdocs">Options FollowSymLinksAllowOverride NoneOrder allow,denyAllow from all</Directory>##设置默认目录资源列表文件<IfModule dir_module>DirectoryIndex index.html</IfModule>##拒绝对.ht开头文件的访问,以保护.htaccess文件<FilesMatch "^\.ht">Order allow,denyDeny from allSatisfy All</FilesMatch>##指定错误日志文件ErrorLog logs/error_log##指定记录到错误日志的消息级别LogLevel warn<IfModule log_config_module>##定义访问日志的格式LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" common<IfModule logio_module>LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio</IfModule>##指定访问日志及使用的格式CustomLog logs/access_log combined</IfModule>##设定默认CGI脚本目录及别名<IfModule alias_module>ScriptAlias /cgi-bin/ "/usr/local/apache-2.2.6/cgi-bin/"</IfModule>##在以线程式MPM(worker)运行的Apache中设置用来与CGI守护进程通信的套接字文件名前缀<IfModule cgid_module>Scriptsock logs/cgisock</IfModule>##设定默认CGI脚本目录的属性<Directory "/usr/local/apache-2.2.6/cgi-bin">AllowOverride NoneOptions NoneOrder allow,denyAllow from all</Directory>##设定默认MIME内容类型DefaultType text/plain<IfModule mime_module>##指定MIME类型映射文件TypesConfig conf/mime.types##增加.Z .tgz的类型映射AddType application/x-compress .ZAddType application/x-gzip .gz .tgz</IfModule>##启用内存映射EnableMMAP on##使用操作系统内核的sendfile支持来将文件发送到客户端EnableSendfile on##指定多路处理模块(MPM)配置文件并将其附加到主配置文件Include conf/extra/httpd-mpm.conf##指定多语言错误应答配置文件并将其附加到主配置文件Include conf/extra/httpd-multilang-errordoc.conf##指定目录列表配置文件并将其附加到主配置文件#Include conf/extra/httpd-autoindex.conf##指定语言配置文件并将其附加到主配置文件Include conf/extra/httpd-languages.conf##指定用户主目录配置文件并将其附加到主配置文件#Include conf/extra/httpd-userdir.conf##指定用于服务器信息和状态显示的配置文件并将其附加到主配置文件#Include conf/extra/httpd-info.conf##指定提供Apache文档访问的配置文件并将其附加到配置文件#Include conf/extra/httpd-manual.conf##指定DAV配置文件并将其附加到主配置文件#Include conf/extra/httpd-dav.conf##指定与Apache服务自身相关的配置文件并将其附加到主配置文件Include conf/extra/httpd-default.conf##指定mod_deflate压缩模块配置文件并将其附加到主配置文件Include conf/extra/httpd-deflate.conf##指定mod_expires模块配置文件并将其附加到主配置文件Include conf/extra/httpd-expires.conf##指定虚拟主机配置文件并将其附加到主配置文件#Include conf/extra/httpd-vhosts.conf##指定SSL配置文件并将其附加到主配置文件Include conf/extra/httpd-ssl.conf##SSL默认配置<IfModule ssl_module>SSLRandomSeed startup builtinSSLRandomSeed connect builtin</IfModule>###==========httpd.conf end=================== 4.3.3 配置多路处理模块(MPM)编辑多路处理模块配置文件:vi /usr/local/apache-2.2.6/conf/extra/httpd-mpm.conf 如果使用prefork多路处理模块,按下面的提示修改:###=============httpd-mpm.conf prefork begin===================##设置prefork多路处理模块<IfModule mpm_prefork_module>StartServers 5MinSpareServers 5MaxSpareServers 10ServerLimit    4000MaxClients 4000MaxRequestsPerChild 0</IfModule>###=============httpd-mpm.conf prefork end===================   指令说明:  StartServers:设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。  MinSpareServers:设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。MaxSpareServers:设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。ServerLimit:服务器允许配置的进程数上限。只有在你需要将MaxClients设置成高于默认值256的时候才需要使用。要将此指令的值保持和MaxClients一样。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。  MaxClients:用于伺服客户端请求的最大请求数量(最大子进程数),任何超过MaxClients限制的请求都将进入等候队列。默认值是256,如果要提高这个值必须同时提高ServerLimit的值。笔者建议将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。MaxRequestsPerChild:设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏无限进行而耗尽内存;给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。如果设置为非零值,笔者建议设为10000-30000之间的一个值。公式:   MaxClients<=ServerLimit  如果使用worker多路处理模块,按下面的提示修改:###=============httpd-mpm.conf worker begin===================##设置worker多路处理模块<IfModule mpm_worker_module>StartServers 5ServerLimit 20ThreadLimit 200MaxClients 4000MinSpareThreads 25MaxSpareThreads 250ThreadsPerChild 200MaxRequestsPerChild 0</IfModule>###=============httpd-mpm.conf worker end===================指令说明:StartServers:设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。ServerLimit:服务器允许配置的进程数上限。只有在你需要将MaxClients和ThreadsPerChild设置成需要超过默认值16个子进程的时候才需要使用这个指令。不要将该指令的值设置的比MaxClients 和ThreadsPerChild需要的子进程数量高。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。ThreadLimit: 设置每个子进程可配置的线程数ThreadsPerChild上限,该指令的值应当和ThreadsPerChild可能达到的最大值保持一致。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。MaxClients:用于伺服客户端请求的最大接入请求数量(最大线程数)。任何超过MaxClients限制的请求都将进入等候队列。默认值是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加 ServerLimit的值。笔者建议将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。MinSpareThreads:最小空闲线程数,默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。MaxSpareThreads:设置最大空闲线程数。默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和。 ThreadsPerChild:每个子进程建立的线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。每个子进程所拥有的所有线程的总数要足够大,以便可以处理可能的请求高峰。MaxRequestsPerChild:设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏无限进行而耗尽内存;给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。如果设置为非零值,笔者建议设为10000-30000之间的一个值。公式:ThreadLimit >= ThreadsPerChildMaxClients <= ServerLimit * ThreadsPerChild 必须是ThreadsPerChild的倍数MaxSpareThreads >= MinSpareThreads+ThreadsPerChild 4.3.4 配置Apache服务器默认设置编辑Apache服务器默认设置文件:vi /usr/local/apache-2.2.6/conf/extra/httpd-default.conf 按下面的提示修改:###=============httpd-default.conf begin===================##Apache默认设置文件Timeout 120KeepAlive OffMaxKeepAliveRequests 100KeepAliveTimeout 5UseCanonicalName OffAccessFileName .htaccessServerTokens ProdServerSignature OffHostnameLookups Off###=============httpd-default.conf end====================指令说明:  Timeout:设置服务器在断定请求失败前等待的秒数。默认值300。KeepAlive:设置是否启用HTTP持久链接,On 代表打开,Off 代表关闭。如果用于同一页面包含大量静态文件的应用,设置为On,以提高性能;如果用于主要为动态页面的应用,设置为Off,以节约内存资源;如果服务器前跑有squid或者其它七层设备,设置为On。MaxKeepAliveRequests:限制当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。笔者建议将此值设为100-500之间的一个值,以确保最优的服务器性能。  KeepAliveTimeout:设置持久链接中服务器在两次请求之间等待的秒数。对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的进程就越多。UseCanonicalName:配置服务器如何确定它自己的域名,可选值为On | Off | DNS。DNS用于为大量基于IP的虚拟主机支持那些古董级的不提供"Host:"头的浏览器使用。笔者建议设置为Off。AccessFileName:设置分布式配置文件的名字,默认为.htaccess。如果为某个目录启用了分布式配置文件功能,那么在向客户端返回其中的文档时,服务器将在这个文档所在的各级目录中查找此配置文件,因此会带来性能问题,笔者建议关闭分布式配置文件功能。ServerTokens:控制服务器回应给客户端的"Server:"应答头是否包含关于服务器操作系统类型和编译进的模块描述信息,同时还控制着ServerSignature指令的显示内容。可选值为Full | OS | Minor | Minimal | Major | Prod。笔者建议设置为显示最少信息的Prod。ServerSignature:配置服务器生成页面的页脚,可选值为On | Off | EMail。采用On会简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName,而EMail设置会额外创建一个指向ServerAdmin的"mailto:"部分。建议使用默认值Off。HostnameLookups:设置是否启用对客户端IP的DNS查找,可选值为On | Off | Double。DNS查询会造成明显的时间消耗,建议设置为Off。... 全文

apache 配置 优化

apache配置优化(六)

Apache--mod_expires缓存模块(这是apache调优的重要参数)mod_expires介绍:mod_expires允许图片在用户浏览器进行缓存,用户打开网站,第一次会把图片加载到本地,如果在有效期呢,用户在访问,就不需要去网站读取,只是加载在本地。好处一:提升用户体验由于用户读本地缓存了,所以访问页面就快了,也节省网站的带宽流量成本。好处二:节省网站带宽成本... 全文

apache配置优化

apache配置优化(七)

Apache--mod_deflate模块(这是apache调优的重要参数)mod_deflate介绍:该模提供了DEFLATE输出过滤器,允许服务器在将输出内容发发送到客户端以前进行压缩,以节约带宽。好处一:提升用户体验由于内容小了,所以访问页面就快了,用户体验提升了,网站口碑就好了。好处二:节省网站带宽成本... 全文

服务器 apache 配置优化

apache和tomcat性能优化

一、Apache优化修改httpd-mpm.conf文件KeepAlive ON<IfModule prefork.c> StartServers       200  MinSpareServers    5  MaxSpareServers   20 ServerLimit     6500  MaxClients       6000  MaxRequestsPerChild  8000 </IfModule># worker MPM # StartServers: initial number of server processes to start # MaxClients: maximum number of simultaneous client connections # MinSpareThreads: minimum number of worker threads which are kept spare # MaxSpareThreads: maximum number of worker threads which are kept spare # ThreadsPerChild: constant number of worker threads in each server process # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule worker.c> StartServers         400  MaxClients         300  MinSpareThreads     40  MaxSpareThreads     150 ThreadsPerChild     50  MaxRequestsPerChild  6000 </IfModule> 根据自己网站的实际能力修改,后续会有参数的具体意义!二、Tomcat优化:1.java虚拟机性能优化     可以给java虚拟机设置使用的内存,如果你选择不对,虚拟机不会自动补偿.可通过命令行的方式改变虚拟机使用内存的大小:    -Xms<size>  JVM初始化堆的大小   -Xmx<size>  JVM堆的最大值 我们一般把-Xms和-Xmx设为一样大,而堆的最大值受限于系统使用的物理内存.一般使用数据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长.当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务,崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%. Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大. Windows下,在文件/bin/catalina.bat中,Unix下,在文件/bin/catalina.sh的前面,增加如下设置(也许Solaris的设置和Unix类似,不太清楚,研究过再说): JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】' 需要把这个两个参数值调大.例如:         JAVA_OPTS='-Xms256m  -Xmx512m'         表示初始化内存为256MB,可以使用的最大内存为512MB. 另外需要考虑的是Java提供的垃圾回收机制,虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度,如果堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低.如果你把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁.调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求 ... 全文

休闲 apache和tomcat性能优化 职场

apache优化、WORKER工作模式

                              worker的工作原理及配置   相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。   在configure -with-mpm=worker后,进行make编译、make install安装。在缺省生成的httpd.conf中有以下配置段: <IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>   worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。   MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。   ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用ThreadLimit指令,它的最大缺省值是20000。上述两个值位于源码树server/mpm/worker/worker.c中的以下两行: #define DEFAULT_THREAD_LIMIT 64 #define MAX_THREAD_LIMIT 20000   这两行对应着ThreadsPerChild和ThreadLimit的限制数。最好在configure之前就把64改成所希望的值。注意,不要把这两个值设得太高,超过系统的处理能力,从而因Apache不起动使系统很不稳定。   Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。这两个值位于源码树server/mpm/worker/worker.c中的以下两行: #define DEFAULT_SERVER_LIMIT 16 #define MAX_SERVER_LIMIT 20000   需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。下面是笔者的worker配置段: <IfModule worker.c> StartServers 3 MaxClients 2000 ServerLimit 25 MinSpareThreads 50 MaxSpareThreads 200 ThreadLimit 200 ThreadsPerChild 100 MaxRequestsPerChild 0 </IfModule>   通过上面的叙述,可以了解到Apache 2.0中prefork和worker这两个重要MPM的工作原理,并可根据实际情况来配置Apache相关的核心参数,以获得最大的性能和稳定性。 ... 全文

休闲 职场 apache优化 WORKER工作模式

APACHE调优、web服务器优化

 转载本站文章请注明,作者:jean本文连接http://www.zhangyiqun.net/23.html1、除特别说明外,本博客内容皆为原创,可以自由转载传播,但请署名及注明出处,不尊重别人劳动成果的不欢迎;2、本博客内容遵守“署名-非商业性使用-禁止演绎 2.5 中国大陆”协议;作者:张逸群Mail:jeantoe@gmail.com调优是一个大主题,涉及面颇广。目前受条件所限,大部分人可能只能从apache本身入手调优。所以本文将主要从apache的配置方面入手来详解apache调优。希望对正在使用apache的朋友有所裨益,有什么问题欢迎交流探讨,大家共同学习共同进步!KeepAlive参数KeepAlive OnMaxKeepAliveRequests 0KeepAliveTimeout 15使用keepalive可以在单一连接时进行多个请求。Keepalivetimeout 每个连接保持的时间MaxKeepAliveRequests这个我就不解释了,意思是最大保持的连接数,0为不限制。我在来形象的描述一下,KeepAlive中的连接就像是餐厅中的女服务员,我和几个哥们要了几个菜以后,她不走还站继续服务(雅间门口的服务员),等了一个小时超过了她的最大服务时间(Keepalivetimeout),于是她撤了这个功能是开还是不开呢?因服务器而异,就像五星级的餐厅和街边小餐馆的区别。选择多处理模块(Multi-Processing Module,MPM)这玩意主要负责管理网络连接、调度请求。理解成不同的社会制度就好,万恶的封建主义和万恶的资本主义,很难说的清谁好谁坏,所以针对不同情况选择就好。每次只能有一种 MPM 被应用,必须使用 –with-mpm=(worker|prefork|event) 静态编译。Apache默认安装是使用一个进程的传统模型称为 prefork。较新的线程化模型称为 worker,它使用多个进程,每个进程又有多个线程,这样就能以较低的开销获得更好的性能。最新的 event MPM 是一种实验性的模型,为不同的任务使用单独的线程池。要确定当前使用的是哪种 MPM,可执行 httpd -l。 ... 全文

休闲 职场 APACHE调优 web服务器优化

Apache配置压缩优化时报错——undefined symbol: inflateEnd

   圣诞都过了,好久没来51发博文了。最近一直在忙考试和其他一些私人事务,感觉长期不发博文,有点不好。不是不发,实在是最近总结的东西,没法发,都是一些考试相关的东西。蛋疼!正好帮助朋友搭网站环境了,就想起来之前有一篇总结错误的文章当时想发,后来给忘掉了,今天就拿出来发上吧。哈哈!Apache配置压缩优化时报错——undefined symbol: inflateEnd... 全文

apache 优化 压缩 lib

Apache安装、配置、优化(1)

Apache 安装、配置、优化安装 Apache 2.0.48 (查看Install手册)考虑到以后要 rewite_url 来使 google 更加容易收录网站,特地添加了 mod_rewrite 。同时为了限制流量,特别加了 mod_limitpcnn.c 补丁 , 所以多了一个 --enable-forward 选项。建议安装完毕以后不要删除安装目录,以便以后升级时使用。记得升级前关闭 apache2.0编译过程:代码:... 全文

Apache安装 Apache web服务器 linux

关于优化需要永远牢记的原则

1.尽量不要去搞什么性能优化,因为十有八九你会失望的 首先,不要指望调节系统参数就能带来性能的大幅提升,这永远都不可能,因为如果能大幅提升,那组参数早就成默认参数或者写进文档了,即使不一定这样,起码有对技术比较痴迷的家伙会把类似的经验分享出来,轮到你来做这件事的几率很低很低。正如你能想到电梯的创意,可那玩意儿都已经存在100年了。 其次,如果一个参数的微调能引起性能数量级级别的变化,那就是内核的bug了,你需要的是提交修复补丁而不是引以为成果! 再次,仅仅通过优化的方式希望得到性能大幅提升,那你是过分依赖软件了,这种可能性正如你大幅度被加薪的可能性一样大。虽然不乏通过跳槽使薪资翻倍的可能,但其中也不乏欺世盗名之徒,他们依赖的是面试技巧,学历,资历等,而不是“自身性能的翻倍”。调节薪水一次肯定不会调太多,你需要在一个薪水档次慢慢沉淀一下自己,明白了这一点,就不要急于做优化了,1.6G主频的cpu在没有换成2.4G主频cpu之前,不要指望通过软件的方式大幅提高性能,即使到了2.4G主频的cpu,也不要指望性能能提高2.4/1.6倍,这个道理正如你一天能写160行代码,你的薪资为1.6k,然后半年后你一天能写的代码数量达到了240行,难道你的薪资就一定能自动到达2.4k吗?我看难。 因此,性能优化和你自身的优化一样,你需要稳扎稳打,而绝对不能指望一夜之间脱胎换骨,搅和起来N多的因素需要考虑,软件只是一种将硬件组织起来的东西,如果你的硬件有“硬伤”,那还是先治疗硬伤为好。所以说,程序员们不要一味的整天“代码,代码,代码,我用了效率最高的算法,为何不能更快一些”,深入下去,从整体上考虑会更好一些 2.所谓的优化只是统计意义上的优化而已。 因此能不优化尽量不要优化 3.不要过分依赖负载均衡,有时候负载均衡并不适合你的场合 Intel的千兆网卡支持多个队列,可以将负载均衡到所有cpu上,每个cpu处理一个队列,然而测试后你会发现,大多数情况下,将绑在一个cpu上性能或许会更好些。实际上学过基础理论的都知道负载均衡是个好东西,然而对于Intel的千兆卡,它大多数还是用于虚拟化的,而不是普通的主机环境。我们需要考虑的是cpu拓扑,中断绑定,cpu缓存拓扑等综合因素的影响,而不是过分依赖一个很时髦的名词。 4.看代码是看不出什么东西的 现在很多的guo书,blog上都在大量剖析代码,Linux源码分析,Apache源码分析,XX源码分析...可是看代码究竟能提高自己吗?能是肯定的,但是很难! 我觉得在软件技术领域-当然不单单只软件开发,有所谓7个层次: a.数量使用和配置软件 b.剖析优秀软件代码或者了解其实现原理 c.调试优秀软件 d.部署复杂软件,使之成为一个可用的复杂系统且能迅速故障定位 e.整体系统性能调优,能找到瓶颈,且能准确选型 f.对各种软件技术触类旁通 g.hacker 处于a级别的太多了,你我ta都是,处于b级别的也不少,科班出身的几乎都有这爱好,并且有大批的人停留在此级别,c级别的呢,windows程序员比较多,他们喜欢搞反汇编之类的,而且还喜欢炫耀ringX的知识...处于d阶段,你就很厉害了,毕竟软件是来使用的,可能d级别的人根本就不懂c语言,也没看过什么代码,然而我觉得它们一下子能搞定复杂系统的部署和定位故障,这本身就是一种超级武器,e阶段的人总的来讲和d阶段是并列的,只是方向不同,e阶段的家伙一般是忠于单点的,而d阶段的家伙一般忠于整体。f阶段的就不必说了,这种人本身肯定对技术很痴迷,并且能胜任几乎一切工作,g阶段的家伙们很随意,他们是真正的自由人,他们想做的事情总是干得很漂亮,他们不想干的事情,... 以上分类并不是一个顺序的分类,可能a级别的人一辈子也不会到达b,然而却可以到达g,这只是学习方向不同,也是自身品位不同。 5.优化自身的原则 为了提高逻辑思维能力和条理性,需要学习数学和逻辑学,我高中时有一个物理老师,他讲的所有内容中,我觉得有一点很有用,那就是“你必须要有大段大段整理数学式子的能力”; 作为一名软件研发人员,3年前在长春的一家公司,那里的一个很牛的人说了一句话,我现在都记得,他说“你要有大量整理字符串的能力”,整理字符串的过程中体现的是你的组织能力和,折射出的是你的算法思想。 如今,从业5年了,前不久又学了一句话,那是“只要是没有人为因素的纯技术问题,是一定一定有解决办法的!”... 全文

优化 负载均衡 性能优化 算法 apache 汇编

nginx反向代理配置及优化

nginx反向代理配置及优化2009-05-26作者:守住每一天blog:liuyu.blog.51cto.combbs:bbs.linuxtone.orgmsn:liuyubj520#hotmail.comemail:liuyu105#gmail.com前言:     由于服务器apache抗不住目前的并发.加上前端squid配置后,问题依然无法解决.而页面程序大部分是动态.无法使用fastcgi来处理.因此想使用nginx做为反向代理apache.整个配置安装过程很简单.在考虑高并发的情况下,在安装前就做了些优化.目前配置能抗住3000以上并发.好像不是特别大哦?呵~~ 但足以~~ 只是还有少量499问题..期待有人跟我讨论解决  第1部分:安装1 建立用户及组/usr/sbin/groupadd www/usr/sbin/useradd -g www www2 安装pcre 让nginx支持rewrite 方便以后所需wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gztar zxvf pcre-7.8.tar.gzcd pcre-7.8/./configuremake && make install3 安装nginxwget http://sysoev.ru/nginx/nginx-0.7.58.tar.gztar zxvf nginx-0.7.58.tar.gzcd nginx-0.7.58/./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-cc-opt='-O2' --with-cpu-opt=opteronmake && make install#注意上文中的--with-cc-opt='-O2' --with-cpu-opt=opteron 这是编译器优化,目前最常用的是-02 而不是3.后面对应CPU的型号,可参照:http://wiki.gentoo.tw/index.php/HOWTO_CFLAG第2部分:配置及优化配置文件1 nginx.conf 配置文件:user    www www;worker_processes 4;# [ debug | info | notice | warn | error | crit ]error_log    /usr/local/webserver/nginx/logs/nginx_error.log    crit;pid                /usr/local/webserver/nginx/nginx.pid;#Specifies the value for maximum file descriptors that can be opened by this process.worker_rlimit_nofile 51200;events{         use epoll;         worker_connections 51200;}http{         include             mime.types;         default_type    application/octet-stream;         source_charset GB2312;         server_names_hash_bucket_size 256;         client_header_buffer_size 256k;         large_client_header_buffers 4 256k;         #size limits         client_max_body_size             50m;         client_body_buffer_size        256k;         client_header_timeout     3m;         client_body_timeout 3m;         send_timeout             3m; #参数都有所调整.目的是解决代理过程中出现的一些502 499错误              sendfile on;         tcp_nopush         on;         keepalive_timeout 120; #参数加大,以解决做代理时502错误         tcp_nodelay on;                 include                    vhosts/upstream.conf;         include                    vhosts/bbs.linuxtone.conf; }2 upstream.conf 配置文件(这也是做负载的配置方法)upstream.conf            upstream bbs.linuxtone.com {                 server 192.168.1.4:8099;             }3 站点配置文件bbs.linuxtone.confserver     {            listen             80;            server_name    bbs.linuxtone.conf;            charset GB2312;            index index.html index.htm;            root    /date/wwwroot/linuxtone/;                location ~ ^/NginxStatus/ {                        stub_status on;                        access_log off;                 }         location / {             root    /date/wwwroot/linuxtone/;             proxy_redirect off ;             proxy_set_header Host $host;             proxy_set_header X-Real-IP $remote_addr;             proxy_set_header REMOTE-HOST $remote_addr;             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;             client_max_body_size 50m;             client_body_buffer_size 256k;             proxy_connect_timeout 30;             proxy_send_timeout 30;             proxy_read_timeout 60;             proxy_buffer_size 256k;             proxy_buffers 4 256k;             proxy_busy_buffers_size 256k;             proxy_temp_file_write_size 256k;             proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;             proxy_max_temp_file_size 128m;             proxy_pass    http://bbs.linuxtone.com;            }#参数都有所调整.目的是解决代理过程中出现的一些502 499错误    #Add expires header for static content     location ~* \.(jpg|jpeg|gif|png|swf)$ {         if (-f $request_filename) {             root /date/wwwroot/linuxtone/;             expires            1d;             break;            }     }         log_format    access    '$remote_addr - $remote_user [$time_local] "$request" '                                                 '$status $body_bytes_sent "$http_referer" '                                                 '"$http_user_agent" $http_x_forwarded_for';        access_log    /exp/nginxlogs/bbs.linuxtone_access.log    access;    }注:第二种代理方式 nginx 处理下图片,html等静态的东西.其它动态由apache处理.因此apache也需要做一些参数调整.设置图片等过期时间.缓解请求.如果源与nginx在同一台机器建议使用如下方法:                 location / {                            proxy_pass    http://192.168.1.4:8099/;                            proxy_redirect default ;                 }针对不同的目录进行代理把下面的配置放到根目录代理的上面                location /linuxtone/ {                            proxy_pass    http://192.168.1.4:8099/linuxtone/;                            proxy_redirect default ;                 }4 源配置<VirtualHost 192.168.1.4:8099>        ServerAdmin liuyu105#gmail.com        DocumentRoot /date/wwwroot/linuxtone        ServerName bbs.linuxtone.com        ErrorLog logs/linuxtone_error_log     CustomLog "|/usr/local/sbin/cronolog logs/linuxtone_access_log.%Y%m%d" combined</VirtualHost> 第3部分:源的优化1 apache-mpm.conf<IfModule mpm_prefork_module>        StartServers                    15        MinSpareServers             15        MaxSpareServers            30        ServerLimit                 2536        MaxClients                    2048        MaxRequestsPerChild     1500</IfModule>2 apache-keepaliveTimeout 120   #与nginx的保持一至KeepAlive OnMaxKeepAliveRequests 400KeepAliveTimeout 7第4部分:PHP的优化优化一:将PHP由之前的xcache换成eaccelerator1 安装wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2tar jxvf eaccelerator-0.9.5.3.tar.bz2cd eaccelerator-0.9.5.3//usr/local/webserver/php/bin/phpize./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php5/bin/php-configmakemake install注:PHP路径以安装为准!2 配置sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/"\nextension = "memcache.so"\n#' /etc/php.inised -i 's#output_buffering = Off#output_buffering = On#' /etc/php.inised -i "s#; always_populate_raw_post_data = On#always_populate_raw_post_data = On#g" /etc/php.ini配置eAccelerator加速PHP:mkdir -p /usr/local/webserver/eaccelerator_cachevi /etc/php.ini按shift+g键跳到配置文件的最末尾,加上以下配置信息:[eaccelerator]zend_extension="/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"eaccelerator.shm_size="128"eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"eaccelerator.enable="1"eaccelerator.optimizer="1"eaccelerator.check_mtime="1"eaccelerator.debug="0"eaccelerator.filter=""eaccelerator.shm_max="0"eaccelerator.shm_ttl="300"eaccelerator.shm_prune_period="120"eaccelerator.shm_eaccelerator.compress="1"eaccelerator.compress_level="9"优化二:联系开发重新编译php减少php的模块.以减少php进程所占用内存数.这块尽管影响不大,但也有一定的作用.编译前也可以参照nginx的编译器优化方式安装.第5部分:测试并启动nginxulimit -SHn 51200/usr/local/webserver/nginx/sbin/nginx -t /usr/local/webserver/nginx/sbin/nginx第6部分:nginx日志切割脚本#!/bin/bash# This script run at 00:00# The Nginx logs pathlogs_path="/exp/nginxlogs/"mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/mv ${logs_path}bbs.linuxtone_access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/bbs.linuxtone_access_$(date -d "yesterday" +"%Y%m%d").logkill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`crontab -e 00 00 * * * /bin/bash    /usr/local/webserver/nginx/sbin/cut_nginx_log.sh 本文出自 “seven” 博客,请务必保留此出处http://liuyu.blog.51cto.com/183345/166381... 全文

linux apache nginx

Web开发者必知的25个Apache性能优化技巧

Apache部分:1. 移除不用的模块。2. 使用 mod_disk_cache NOT mod_mem_cache 。3. 扁平架构配置mod_disk_cache。4. 安装恰当的Expires, Etag, 和 Cache-Control Headers 。5. 将缓存放在独立的磁盘6. 使用管道日志替代直接记录7. 将日志放在不同的磁盘8. 使用 mod_gzip/mod_deflate 。9. 将HostnameLookups关闭.10. 避免在configs中使用主机名。11. 使用持久连接。12. 不要设置KeepAliveTimeout太高。13. 禁用.htaccess。14. 允许symlinks。... 全文

Web服务器

Apache 2.0性能优化—MPM的选择与配置

  Apache 2.0在性能上的改善最吸引人。在支持POSIX线程的Unix系统上,Apache可以通过不同的MPM运行在一种多进程与多线程相混合的模式下,增强部分配置的可扩充性能。相比于Apache 1.3,2.0版本做了大量的优化来提升处理能力和可伸缩性,并且大多数改进在默认状态下即可生效。但是在编译和运行时刻,2.0也有许多可以显著提高性能的选择。本文不想叙述那些以功能换取速度的指令,如HostnameLookups等,而只是说明在2.0中影响性能的最核心特性:MPM(Multi -Processing Modules,多道处理模块)的基本工作原理和配置指令。   毫不夸张地说,MPM的引入是Apache 2.0最重要的变化。大家知道,Apache是基于模块化的设计,而Apache 2.0更扩展了模块化设计到Web服务器的最基本功能。服务器装载了一种多道处理模块,负责绑定本机网络端口、接受请求,并调度子进程来处理请求。扩展模块化设计有两个重要好处:   ◆ Apache可以更简洁、有效地支持多种操作系统;   ◆ 服务器可以按站点的特殊需要进行自定制。   在用户级,MPM看起来和其它Apache模块非常类似。主要区别是在任意时刻只能有一种MPM被装载到服务器中。   指定MPM的方法   下面以Red Hat Linux 9为平台,说明在Apache 2.0中如何指定MPM (Apache采用2.0.45)。先解压缩源代码包httpd-2.0.45.tar.gz,生成httpd-2.0.45目录(Apache 1.3源代码包的命名规则是apache_1.3.NN.tar.gz,而2.0版则是httpd-2.0.NN.tar.gz,其中NN是次版本号)。   进入httpd-2.0.45目录,运行以下代码: $ ./configure --help|grep mpm?   显示如下: --with-mpm=MPM Choose the process model for Apache to use. MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool}   上述操作用来选择要使用的进程模型,即哪种MPM模块。Beos、mpmt_os2分别是BeOS和OS/2上缺省的MPM, perchild主要设计目的是以不同的用户和组的身份来运行不同的子进程。这在运行多个需要CGI的虚拟主机时特别有用,会比1.3版中的SuExec 机制做得更好。leader和threadpool都是基于worker的变体,还处于实验性阶段,某些情况下并不会按照预期设想的那样工作,所以 Apache官方也并不推荐使用。因此,我们主要阐述prefork和worker这两种和性能关系最大的产品级MPM ( 有关其它的MPM详细说明,请参见Apache官方文档:[url]http://httpd.apache.org/docs-2.0/mod/[/url])。   prefork的工作原理及配置   如果不用“--with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM。它所采用的预派生子进程方式也是 Apache 1.3中采用的模式。prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。   若使用prefork,在make编译和make install安装后,使用“httpd -l”来确定当前使用的MPM,应该会看到prefork.c(如果看到worker.c说明使用的是worker MPM,依此类推)。再查看缺省生成的httpd.conf配置文件,里面包含如下配置段: <IfModule prefork.c> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule>   prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足 MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。   MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。   MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild” 个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:   ◆ 可防止意外的内存泄漏;   ◆ 在服务器负载下降的时侯会自动减少子进程数。   因此,可根据服务器的负载来调整这个值。笔者认为10000左右比较合适。   MaxClients是这些指令中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值 150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。系统管理员可以根据硬件配置和负载情况来动态调整这个值。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。如果把这个值设为大于256,那么 Apache将无法起动。事实上,256对于负载稍重的站点也是不够的。在Apache 1.3中,这是个硬限制。如果要加大这个值,必须在“configure”前手工修改的源代码树下的src/include/httpd.h中查找 256,就会发现“#define HARD_SERVER_LIMIT 256”这行。把256改为要增大的值(如4000),然后重新编译Apache即可。在Apache 2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients。下面是笔者的prefork配置段: <IfModule prefork.c> StartServers 10 MinSpareServers 10 MaxSpareServers 15 ServerLimit 2000 MaxClients 1000 MaxRequestsPerChild 10000 </IfModule>   上述配置中,ServerLimit的最大值是20000,对于大多数站点已经足够。如果一定要再加大这个数值,对位于源代码树下server/mpm/prefork/prefork.c中以下两行做相应修改即可: #define DEFAULT_SERVER_LIMIT 256 #define MAX_SERVER_LIMIT 20000   worker的工作原理及配置   相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是, worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。   在configure -with-mpm=worker后,进行make编译、make install安装。在缺省生成的httpd.conf中有以下配置段: <IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>   worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild 线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。   MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。   ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。上述两个值位于源码树server/mpm/worker/worker.c中的以下两行: #define DEFAULT_THREAD_LIMIT 64 #define MAX_THREAD_LIMIT 20000   这两行对应着ThreadsPerChild和ThreadLimit的限制数。最好在configure之前就把64改成所希望的值。注意,不要把这两个值设得太高,超过系统的处理能力,从而因Apache不起动使系统很不稳定。   Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。这两个值位于源码树server/mpm/worker/worker.c中的以下两行: #define DEFAULT_SERVER_LIMIT 16 #define MAX_SERVER_LIMIT 20000   需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。下面是笔者的 worker配置段: <IfModule worker.c> StartServers 3 MaxClients 2000 ServerLimit 25 MinSpareThreads 50 MaxSpareThreads 200 ThreadLimit 200 ThreadsPerChild 100 MaxRequestsPerChild 0 </IfModule>   通过上面的叙述,可以了解到Apache 2.0中prefork和worker这两个重要MPM的工作原理,并可根据实际情况来配置Apache相关的核心参数,以获得最大的性能和稳定性。... 全文

职场 休闲

1