我有另一个相关的问题,但我偏离它,因为我正在改变我的服务器使用nginx而不是Apache。
相关: 服务器问题,耗尽内存,真正的高负载平均
我仍然有问题,但现在更容易瞄准。 以下是我可以给予的详细情况:
我的妻子有一个WordPress站点,插入了很多插件,包括WooCommerce。 即使只是我们两个人不停地上网(我打开两个浏览器,一个浏览器),我们就能够停止服务器。
系统规格:Debian 7.7,512MB RAM,512MB交换,2个内核(速度未知),nginx,PHP5-FPM,MySQL服务器。
我的terminal窗口截图非常多,讲述了这个故事:

在冲浪期间,vmstat si / so值为0(大部分)。 当我们同时在网站上冲浪的时候,价值观已经变得越来越高了,而且htop显示出了一些严重的挣扎。 有了新的nginx / php-fpm设置,如果我只是运行sudo service php5-fpm restart ,一切都是固定的。 同样的问题也发生在Apache上,如果我们在同一时间浏览网站,si / so skyrockets,站点冻结,那么它要么在一段时间后自行恢复,要么我必须重新启动Apache。
我在这里不知所措 我宁愿向前移动我的nginx安装程序并对其进行故障排除。 在这种情况下,似乎php-fpm也许是问题。 但是只要我们点击服务器,这是非常不可接受的。 如果她一下子突然有20人来到现场,我们就会被拧紧。
如果这是一个失败的原因,试图在一个512MB的2核心服务器上运行WordPress网站,让我知道。 我可能需要升级到1024MB / 4核。
将您的应用程序和显示逻辑(前面)与数据访问逻辑和存储(后面)分开。 数据库将产生大量的IO活动,因此会减慢同一服务器内的其他内容。
添加RAM。 不,认真的,添加内存。 访问存储在内存中的数据比访问存储在闪存驱动器中的数据要快,这比访问存储在旋转硬盘驱动器内的数据要快。
在应用程序和数据库之间添加caching层,例如memcached或空间中的其他一些caching层。 同样,这意味着经常访问的数据可以从内存中取出,而不是从旋转的盘片上取下。
更多的硬盘。 硬盘一次只能寻求一个物理位置。 通过增加主轴数量,您可以让其他人在读取时进行search,并在更多的物理设备之间划分更耗时的部分(search)。
在多个物理盒子之间拆分web头部,并设置一个负载平衡器来在它们之间喷射请求(注意它们都将会话数据存储在共享存储区中,例如数据库或CIFS / NFS共享中的文件),这样他们可以分担负载。
使用提供连接池和连接重用的Web服务器,因为相对于服务请求而言,启动连接的时间很长,特别是当大部分数据都在内存中时。
审计您的服务器或服务器内的进程,并确定是否有多余的build设价值。 确定是否有使用资源(RAM,CPU,磁盘IO)但不能创build值,并确定它们是否可以安全禁用。
通过Berkeley Syslog将日志(特别是http访问日志和http错误日志)stream式传输到专用日志框(运行RSyslogd或Splunk等),而不是写入本地磁盘。 再次,本地磁盘访问是昂贵的。
testing您的服务器,观察是否有多less数据从主内存换出到磁盘。 如果超过5%,或者数量不均匀,stream量大,则添加更多内存。 严重的是,分页到磁盘是缓慢,昂贵和痛苦的。
仪器你的PHP,并find哪些部分是最繁忙的,哪些部分使用什么套资源。 为内存使用率,CPU时间,磁盘IO使用率和networking使用分配成本。 通过平均访问时间来扩展这些成本。 其实根据这些费用收取自己的费用,并把钱投入到你的优化基金。 现在看看如何省钱。
但严重的是,更多的内存。
编辑1:这是我可以打破它。 这是一个非常粗糙的,后卫的devise,但它说明了如何使其规模。 可能看起来新的片段是队列位。 他们基本上抽象出networkingstream量,使整个系统耦合更less。 这意味着数据后端和网页头之间的短暂瞬变将不太具有破坏性,并且会更容易恢复。 队列在Web头的应用程序和数据库服务器的前端之间运行,并由队列pipe理器进行pipe理。 这种更松散的耦合将减less在半夜中为单个瞬时信号翻页的需要。

对于nginx你必须做很less的调整。 所有你可以做的OS / nginx调整可能会让你的每秒钟多5-10%的请求。 对我来说,你是更多的记忆绑定任何东西。 你最好的办法是从你的networking服务器中删除php-fpm进程,并创buildnginx发送stream量的应用服务器。
---> internet -> nginx -> many app servers