我有一个 16 GB RAM 的网络服务器。该服务器流量很大,可以同时处理 300 个请求。
不幸的是,当这些峰值到达时,查询会出现错误或非常慢。
当我通过 free 命令查看服务器上使用的 RAM 时,它从未超过 4-5 GB,并且 CPU 负载平均为 10%。
total used free shared buffers cached
Mem: 16392540 4820632 11571908 0 356120 1948920
-/+ buffers/cache: 2515592 13876948
Swap: 1049596 0 1049596
这是我的 Apache 2 prefork 配置:
StartServers 32
MinSpareServers 32
MaxSpareServers 64
ServerLimit 512
MaxClients 512
MaxRequestsPerChild 0
Timeout 15
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 3
我想让 Apache 使用更多内存来处理所有请求,并且不会超载。但即使我更改配置,似乎也不会对内存使用产生任何影响。
我说我的服务器使用普莱斯克。
我也使用MySQL数据库但仅包含一个表和几条记录。
你有什么主意吗?
谢谢你的帮助。
马丁
答案1
我也使用 MySQL 数据库,但只包含一个表和几条记录。
如果你正在运行 MySQL 数据库,那么你的磁盘是瓶颈。
即使只有“一张表和几条记录”,您仍然可能会遇到错误的查询、漫长的等待时间或数据库的某种问题,从而导致严重延迟,从而导致速度缓慢。
我之所以这么说,是因为你已经确定你的内存和 CPU 并没有承受太大的压力。
另一件要考虑的事情是,你的网络吞吐量是否足以满足你接收的请求量。
最后要说的是,请相信我:在这里调整 Apache 将是徒劳的。查看您的数据库、磁盘性能和网络带宽/吞吐量。
答案2
Vasili 关于硬盘及其瓶颈的说法非常正确。另外,如果您使用的是 Plesk 11,则可以在 apache 前面安装 nginx。默认情况下,nginx 未配置并以“混杂模式”工作。因此,您可以根据需要简单地对其进行配置和自定义,从而释放 apache 以提供静态文件。