我的服务器出了点问题。流量很大,速度很慢,有时我的用户无法访问。
以下是服务器规格:
CPU: Intel(R) Xeon(R) CPU E5620 @ 2.40GHz - 16 Processors
RAM: 2GB
Apache 配置的值包括:
StartServers: 5
MaxSpareServers: 10
MinSpareServers: 5
MaxClients: 150
ServerLimit: 256
MaxRequestsPerChild: 1000
KeepAlive: On
KeepAliveTimeout: 5
MaxKeepAliveRequests: 100
TimeOut: 300
对于我配置的服务器来说,最佳值是多少才能以合理的速度支持最大数量的用户而不会导致服务器崩溃!
谢谢。
答案1
问题是您只有 2GB 的 RAM,并且将 MaxRequestsPerChild 设置为相当高的值。
您的配置基本上表明您可以同时拥有最多 256 个 apache 线程(每个线程服务 1 个请求),并且每个线程在被回收并替换为新线程之前将服务 1000 个请求。
在处理 1000 个请求时,该线程的内存占用对于您的 2GB 系统来说将变得太大。
我建议的另一件事是检查您交付了多少静态内容,有多少是动态内容(php)。您可以通过查看日志或分析 mod_Status(apache2ctl fullstatus)输出来检查。
如果您有大量静态内容、图像等,我建议将 nginx 之类的网络服务器放在 apache 前面,以便更好地处理静态内容,并且只需在某些本地绑定的不同端口上将非静态内容请求代理到 apache。
答案2
“减速”通常由于网络服务器拥塞(对于许多客户端而言)或使用交换而引起。
为了防止拥塞,KeepAliveTimeout
可以将该值降低到 1 到 3 之间。这样服务器就可以更快地从客户端中解放出来,并允许更多不同的客户端在同一时间内做出响应。
您应该检查您的服务器是否从不交换,如果是,您应该降低MaxClients
(是的,这将阻止一些客户端请求,但至少,连接的客户端将在更短的时间内得到响应,并将快速释放服务器资源)。如果当所有 150 个客户端都连接时您有一些可用内存,您可以小心地增加这个MaxClient
数字。
如果您使用 Linux,则可以尝试降低 ThreadStackSize,这将有助于内核进行内存管理。我已经在自己的服务器上将其毫无问题地降低到 512Ko:
ThreadStackSize 524288
无论如何,你应该尝试设置服务器活动图表,以便准确衡量服务器的使用情况。我喜欢穆宁它设置起来非常简单,默认情况下会提供非常相关的图表,但也有仙人掌,收集和绘制还有很多其他的……