我正在构建的服务器的“堆栈”如下:CentOS 7,Apache 2.4.6,MariaDB 5.X,Tomcat 7服务JSP / Servlet.之前的生产安装使用了CentOS 5,旧版本的Apache和MySQL以及Tomcat 5.X.
Apache是前端,它使用AJP连接到Tomcat后端.大多数流量都是HTTPS.
服务器,我认为是Gen 9 HP服务器,它在RAID 1阵列中有32GB RAM和SSD.在开始工作之后,我现在关注的是最大化其同时为用户提供服务的能力,我预计数百名用户的爆发并不罕见.为此,我希望在堆栈中的任何一点防止出现瓶颈:从Tomcat和MariaDB开始,采取特定于这些措施,我满意的措施.然而,继续使用Apache,我发现理解我应该做什么更加困难.
有3种不同类型的“工人”,我有3个主要问题优化:
1.有三个选项,prefork,mpm_worker和mpm_event.我真的不明白如何配置它们虽然我对每个用途有一般性的了解.
2.与之前服务器中的Apache不同,StartServers,ServerLimit,MaxRequestsPerChild等选项未在/etc/httpd/conf/httpd.conf中列出.我可以手动覆盖默认设置吗?除了“上次手动添加它们”之外还有什么理由可以在较旧的httpd.conf中找到设置而不是新的设置吗?
我指的是这个,在较旧的httpd.conf中,我在新的配置文件中看不到任何类似的东西,只有一个规范:
// prefork MPM
// StartServers: number of server processes to start
// MinSpareServers: minimum number of server processes which are kept spare
// MaxSpareServers: maximum number of server processes which are kept spare
// ServerLimit: maximum value for MaxClients for the lifetime of the server
// MaxClients: maximum number of server processes allowed to start
// MaxRequestsPerChild: maximum number of requests a server process servesStartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000// 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 servesStartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
请注意,我用//替换了哈希符号以表示httpd.conf中的注释,因为哈希符号会使文本显示为标题.
为了解决我在新服务器上遇到的问题,我不知道哪个工作器在旧服务器上使用,prefork和mpm_worker都有设置,但是没有我能找到的实际规范.
>稍微调整之后,如果我愿意,我可以用mpm_worker启动服务器(必须首先禁用PHP.conf文件)但是我不确定控制一切的模块是否是线程安全的(虚拟主机模块,openssl,mod_proxy_ajp) . mod_proxy_ajp是我唯一使用的东西,在任何意义上都是不寻常的.
服务器尚未投入生产,因此我没有选择在大量当前客户端上获取平均内存使用量来帮助确定最大客户端的“完美”数量,此外,我并不关心获取完美的数字,只是一个适当的数字.
如果我想确保大约约400人可能会在给定时间使用服务器,没有人看到http 500类型错误,我应该为Apache使用哪些设置?
在此先感谢,希望这不是太苛刻.
让我看看我是否可以帮助回答一些问题.
>确定正在使用的多处理模块(MPM).
“最简单”的方法是转储任何当前运行的模块并选择mpm,以查看正在运行的模块.这有两种方法:
# apachectl -M | grep mpm mpm_worker_module (shared) # httpd -V | grep MPM Server MPM: worker
>更改正在使用的MPM
在CentOS7上,现在可以在名为/etc/httpd/conf.modules.d/00-mpm.conf的配置文件中控制它.它是一个短文件,任何时候都只能取消注释一个LoadModule.
LoadModule mpm_worker_module modules / mod_mpm_worker.so
更改后需要重新启动服务以激活所需的MPM.
>设置所需的配置值
许多模块的配置指令在未指定时具有默认值.
当使用prefork = 5时,使用worker的StartServers将默认为3.在此处查看更多:https://httpd.apache.org/docs/current/mod/mpm_common.html#startservers.
我建议创建一个新文件来包含您的覆盖,而不是编辑现有的覆盖.
像/etc/httpd/conf.modules.d/10-worker.conf这样的东西:
<IfModule mpm_worker_module> ServerLimit 250 StartServers 10 MinSpareThreads 75 MaxSpareThreads 250 ThreadLimit 64 ThreadsPerChild 32 MaxClients 8000 MaxRequestsPerChild 10000 </IfModule>
与任何事情一样,调整确切的数字由您来测试您的工作负载和应用程序 – 像ab和siege这样的工具可以提供帮助.
> https://httpd.apache.org/docs/2.4/programs/ab.html
> https://www.joedog.org/siege-home/