LAMP内存pipe理(CentOS)

首先,我不得不说我不是服务器pipe理方面的专家。 我已经在几个平台上完成了10多年的networking编程,但是大部分时间都来到了IT专业人员或者一个好的networking托pipe公司的现成情况。

现在我终于在一个需要从零开始构buildLAMP-setup的地方(只用一个香草CentOS安装)来提供非常强大的Wordpress设置。

一切都比较顺利,因为我一直在使用基于Linux的服务器pipe理来阻止事情的发展,但是我每周都会遇到一些非常奇怪的系统冻结,因为我是唯一一个可以访问服务器的人,启动服务,这是非常恼人的。

以下是一些关键数据:

服务器

  • 384MB的内存
  • CentOS 5.6
  • PHP 5.2.10
  • MySQL 5.0.77
  • Apache 2.2.3

用法

  • 约 WordPress中有300篇文章
  • 约 每周10K独特用户
  • 约 每月10万次的浏览量

事情做完了:

  • 所有静态的东西(jQuery的,样式,布局图像)是从外部networking服务器的服务器。
  • WordPress的尽可能caching(W3总caching)
  • 我把问题的范围缩小到内存pipe理 – 或者是缺乏内存pipe理。 出于某种原因,在服务器上禁用了交换function,一旦内存消耗达到100%,服务器就会进入抖动状态,所有希望都将消失。 内存的数量(384MB)仍然足以承载这些统计的网站,所以有些事情是错误的。 我只是想尽一切办法。

    我显然尝试调整my.cnf,php.ini和httpd.conf中的设置,但无济于事。 这是我目前的关键设置:

    my.cnf中

    skip-innodb datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock skip-locking skip-ndbcluster skip-bdb skip-networking safe-show-database query_cache_limit=8M query_cache_size=48M query_cache_type=1 max_user_connections=200 max_connections=32 interactive_timeout=60 wait_timeout=60 connect_timeout=50 thread_cache_size=4 key_buffer= 96M join_buffer=1M max_connect_errors=20 max_allowed_packet=32M table_cache=1024 record_buffer=1M sort_buffer_size=6M read_buffer_size=6M read_rnd_buffer_size=6M thread_concurrency=4 myisam_sort_buffer_size=32M server-id=1 user=mysql tmp_table_size=64M max_heap_table_size=48M 

    php.ini中

     memory_limit = 128M 

    httpd.conf文件

     StartServers 2 MinSpareServers 3 MaxSpareServers 5 ServerLimit 16 MaxClients 16 MaxRequestsPerChild 1000 

    这是可能是非常明显的,我在我的裤子坐在这里飞行的部分。 对于384MB服务器设置,这些设置对于远程设备来说是非常明智的吗 还有什么可以做的,以减less崩溃的数量唯一的解决办法是我login重新启动mysqld和httpd?

    我知道所有这些或多或less已经被讨论了一百万次,并且相信我,我已经经历了从Server Fault发现的所有线程,尝试了所有的提示和指针,但是无济于事。

    愚蠢的是,我们从一个非常可靠的networking托pipe设置转移到这种方式更昂贵的虚拟服务器设置,以减less对服务器稳定性和扩展的担心,但事实上,事情变得更糟,无疑99%,由于我作为pipe理员自己的缺点!

    所以请大人帮我一下 我保证我永远不会对任何IT人员嗤之以鼻,只会编写易于部署的代码,不会在半夜崩溃,除了“系统pipe理员日”以外,在其他日子里通常会以积极的方式记住您。

    1. 主要是因为有了mpm_worker,每个客户端请求都得到它自己的进程,而使用mod_php,每个客户端进程都获得自己的embedded式PHP VM。 尝试减less或禁用KeepAlive时间间隔,这样可以更快地释放客户端进程(2秒对于大多数使用情况来说已经足够了)。
    2. 如果你没有交换分区,你仍然可以像这样设置交换文件

      dd if = / dev / zero of = / swapfile1 bs = 1024 count = 524288
      mkswap / swapfile1
      swapon / swapfile1
      echo“/ swapfile1 swap swap defaults 0 0”>> / etc / fstab

      Web服务器交换仍然会降低性能,但它不会停下来。

    3. replaceApache更轻量级的Web服务器,例如Nginx来减less你的内存使用量。 在CentOS上安装nginx + php
    4. 如果您发现内存不足,请减lessMySQL查询caching大小。 如果您不使用InnoDB存储引擎,可以将skip-innodb添加到my.cnf以减less内存使用量。
    5. 找出什么是你的记忆(观看htop / top,读取日志)。