首页 » VPS 知识 » 浏览内容

linux 下 Apache / http 内存优化和调试


2011-11-18 20:33:57 2,897 0 发表评论 字体: 作者:C.K.
标签: apachehttp内存优化

体验版 88 元,个人版 128 元,多用户版 288元个人版160元升级到多用户版。

优化Apache内存中用到的指令:

# ps -ef|grep http|wc -l //查看请求总数

# cat /proc/loadavg //查看平均负载(loadavg),loadavg高于1,表明任务队列出现了等待,CPU忙不过来了。超过2以上就会明显感到性能降低了

# netstat -ant | grep :80 | wc -l //查看TCP连接数

# netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n

# top //查看系统运行情况

# Linux下如何查看高CPU占用率线程

# ps H -eo user,pid,ppid,tid,time,%cpu,cmd –sort=%cpu

—————————————————-

在 /etc/httpd/conf/目录下。

<IfModule prefork.c>
  • StartServers           8     // 启动时生成的进程数
  • MinSpareServers        5     // 最小空闲线程数,用于处理可能到来的突发请求。
  • MaxSpareServers       20     // 最大空闲线程数,用于处理可能到来的突发请求。
  • ServerLimit          256     // ServerLimit和ThreadLimit这两个指令决定了活动子进程数量和每个子进程中线程数量的硬限制。
  • MaxClients           256     // 客户端最大并发连接数,ServerLimit 要放在 MaxClients 前面!!!
  • MaxRequestsPerChild   50    // 子进程可处理的请求数,0意味着无限可能会出现内存溢出,建议不要使用0,根据实际情况进行调整。
  • </IfModule>
  • ThreadsPerChild
  • MaxRequestsPerChild
  • -------------
  • KeepAlive On
  • MaxKeepAliveRequests 50
  • KeepAliveTimeout 5
  • <IfModule mpm_prefork_module>
  •     StartServers          1
  •     MinSpareServers       1
  •     MaxSpareServers  10
  •     MaxClients          150
  •     MaxRequestsPerChild   50
  • </IfModule>
  • <IfModule mpm_worker_module>
  •     StartServers          1
  •     MaxClients          693
  •     MinSpareThreads       1
  •     MaxSpareThreads     100
  •     ThreadsPerChild      63
  •     MaxRequestsPerChild   50
  • </IfModule>
  • apache先stop,然后在start;restart不起作用。
    —————————————————-

    查找MaxRequestsPerChild,将MaxRequestsPerChild 0改成MaxRequestsPerChild 50即可。

    影响apache性能的几个重要参数(conf/httpd.conf中设置)

    KeepAlive 是否允许持续连接

    MaxKeepAliveRequests 允许的持续连接的最大数

    KeepAliveTimeout 持续连接在没有请求多少秒后切断

    StartServers 最初启动时启动多少个服务器进程

    MinSpareServers 空闲服务器进程的最小数

    MaxSpareServers 空闲服务器进程的最大数

    MaxClients 同时处理的请求数(最重要的参数,要少于ServerLimit)

    MaxRequestsPerChild 每个子进程处理的最大请求数

    它们之前的关系:

    prefork控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待 一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置 的值为止。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空 闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会 自动把其调整为MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和 MaxSpareServers。MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了 “MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如 果设成非零值也有两点重要的好处:1、可防止意外的内存泄漏。2、在服务器负载下降的时侯会自动减少子进程数。

    ServerLimit 2000

    StartServers 10

    MinSpareServers 10

    MaxSpareServers 15

    MaxClients 1000

    MaxRequestsPerChild 2048

    apache的内存使用

    apache进程在使用内存时,是“渐长”的。也就是说,直到这个进程死掉,使用内存的数量是一直增长而不会减少的。这样的话,apache进程使用内存的多少,就决定于你的应用程序最大使用内存量了。

    keepalive参数

    KeepAliveTimeout 这个参数决定了,在什么都不做之前,一个http进程能够等待多长时间?设想一下,如果keepalive设置为on,而 keepalivetimeout设置为一个比较大的数字,apache占用内存会很快的增长。这是因为,一个apache进程完成了一个任务(并达到了 一定的内存占用,想一下“渐进”模式),并不会马上退出,而是等待一个keepalivetimeout时间。假设用户的链接请求持续不断的到来,则积累 起来的无用的apache进程就会相当多,直到timeout,这些进程才会被杀死。

    但是,keepalive的确对于静态的文件,比如图像文件的传送是很有效的,因此,keepalive要设置为on,(off)但是keepalvietimeout要设置的小些,比如5s 15

    MaxRequestsPerChild

    这个参数是说,apache进程在处理了多少个请求之后,必须退出,重新开始,以免在处理中的内存问题。

    对于php脚本来说,把这个参数设置的小一些是有好处的,可以避免程序使用的内存持续增长对apache带来的压力:让这个参数定期释放内存,因为php是在脚本执行完毕后,自动释放只用的资源(内存)的。

      网站统计 Statistics

      • 创建时间: 2005年1月3日 距今4890 天
      • 日志总数: 2461
      • 评论总数: 630
      • 标签总数: 654
      • 链接总数: 273
      • 最后更新: 2017-7-1 18:16:33
      • 您是本站第 13548333 位访客

      广告区 Guǎng Gào