我的networking服务器上应该有多less空闲的内存?

我有一个networking服务器,目前主办两个Wordpress网站和一些基于Java的协作软件。 服务器有2G内存,目前正在使用大约1.8G的可用内存。 现在这里的情况几乎是一个stream量微不足道的试点项目,所以我觉得很明显我需要更多的内存。

我想知道,如果我要释放它,我可能会根据它获得的stream量来预测我的内存需求。 我在Google上探索过,而我发现的东西有点微不足道。 在计算内存需求时,是否应该使用一个很好的启发式方法作为服务器上基础(无stream量)负载的函数?

作为参考,可以看到free -m的输出如下:

  total used free shared buffers cached Mem: 2048 1832 215 0 0 0 -/+ buffers/cache: 1832 215 Swap: 0 0 0 

对我来说,这看起来像使用的实际内存,并不是由于caching或其他任何东西的幻想。

我想我的协作软件的要求将不得不经过实验testing,所以这里是free -m没有运行的软件:

  total used free shared buffers cached Mem: 2048 1109 938 0 0 0 -/+ buffers/cache: 1109 938 Swap: 0 0 0 

我的计划B要弄清楚这一点,就是向服务器添加一堆交换空间,给它一些stream量并根据交换使用的数量进行调整。 我只是想知道如果有人有一个好的经验法则来估计我应该提前多less记忆…或者如果我在想什么是疯了。

非常感谢(事实上,我真的很新)。

答案基本上是这样的。 在您的具体情况下,您安装的网站的质量和效率可能会受到质疑。

例如,本周我正在研究一个stream量相对适中的服务器,但是却消耗了4GB的内存。 在完成代码审查之后,整个网站使用类似于WordPress的现成的CMS,但是使用定制,我们发现了一个主要的瓶颈。 一旦我们解决了这个问题,服务器平均每天使用大约2GB的内存。 内存使用量下降50%!

我不会build议像分割服务器一样使用Ngnix和Apache。 只要使用Apache。 平衡两台不同服务器的configuration令人头疼,不值得边际收益。 Apache很好。 但是说,你应该考虑你的WordPress的PHP网站与Java应用程序与MySQL在同一个盒子。 根据我的经验,你应该做以下几点:

  1. 正确configurationApache: Apache是​​一个很好的软件,但开箱即用就是一个内存pipe理器。 例如,我相信默认是每秒允许255个连接? 我可以向你保证,大多数简单的站点在一个美好的日子里每秒只能获得40个连接。 所以调整Apache对您的stream量是现实的将有所帮助。 此外,在Apache中有一个KeepAlive设置,效果很好! 但是,我认为它已经被设置为100的MaxKeepAliveRequests ,这相当麻烦。 我通常把它设置为大约30个连接,一个2到3秒的小KeepAliveTimeout 。 关键是让KeepAliveTimeout匹配平均页面下载所需的速度和一点点的开销/缓慢空间。 所以如果一个页面在1秒钟内加载,请保持2秒的KeepAliveTimeout
  2. 查看您的WordPress网站的代码是否存在潜在的瓶颈:专注于PHP的核心,并清理您的可能。 注意过多的MySQL调用和文件系统调用。 这是你将能够使应用程序飞行的地方! 另外,请检查您的php.inimemory_limit ,并确保它不高于必要的。 默认是64M,但在很多情况下可以降到32M。
  3. MySQL调优或将其移动到它自己的服务器上:写了上面的MySQL后,我意识到你可能会托pipe你的MySQL实例在同一个盒子。 通过运行一个像MySQL调优的底层脚本来研究优化MySQL的性能。 如果不进行调整,MySQL将耗尽所有的资源和大的系统。 通过调优,MySQL将运行得更好/更快,资源可以被释放用于其他目的。 另外,考虑将你的MySQL数据库移动到一个独立的服务器。 您可能需要学习如何正确地对服务器进行networking和防火墙,以允许您访问服务器,但要防止黑客攻击,但性能优势将会很大。
  4. 考虑将Java应用程序移动到另一个服务器:我的经验法则是每个服务器的一个主要的Java应用程序。 一般来说,Java应用程序可以成为内存猪相比,像WordPress的PHP设置。 通过给Java应用程序使用自己的服务器,WordPress网站将会更加快乐。

关于MySQL的调整,这可能需要几个星期才能确定。 调整脚本的原因是基于MySQL看到的真实stream量。 所以,你基本上让你的网站生活在世界上,等待2天(至less),运行调整脚本,然后等待几天再调整一些。 一个星期左右之后,你应该能够调整MySQL以及你的设置。