AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 951547
Accepted
JellicleCat
JellicleCat
Asked: 2019-01-31 09:47:13 +0800 CST2019-01-31 09:47:13 +0800 CST 2019-01-31 09:47:13 +0800 CST

减少 Apache 进程的数量

  • 772

我正在运行 Apache 2.2。我有 10 个apache进程正在运行,这对我有限的资源造成了负担。

我已经搜索了控制产生多少进程的配置选项,但我可以使用一些帮助。是MaxRequestWorkers吗?是ThreadsPerChild吗?还有什么?(似乎都没有在我的配置文件中设置。)

这是我的一个过程的示例apache:

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY        TIME CMD
5 S    33 26099 25513  0  80   0 - 56951 poll_s ?          1:42 /usr/sbin/apache2 -k start

编辑:

对不起。我正在运行 apache 2.2,而不是 2.4。

启用模组列表:

lrwxrwxrwx 1 root root 28 Sep  5  2014 alias.conf -> ../mods-available/alias.conf
lrwxrwxrwx 1 root root 28 Sep  5  2014 alias.load -> ../mods-available/alias.load
lrwxrwxrwx 1 root root 33 Sep  5  2014 auth_basic.load -> ../mods-available/auth_basic.load
lrwxrwxrwx 1 root root 33 Sep  5  2014 authn_file.load -> ../mods-available/authn_file.load
lrwxrwxrwx 1 root root 36 Sep  5  2014 authz_default.load -> ../mods-available/authz_default.load
lrwxrwxrwx 1 root root 38 Sep  5  2014 authz_groupfile.load -> ../mods-available/authz_groupfile.load
lrwxrwxrwx 1 root root 33 Sep  5  2014 authz_host.load -> ../mods-available/authz_host.load
lrwxrwxrwx 1 root root 33 Sep  5  2014 authz_user.load -> ../mods-available/authz_user.load
lrwxrwxrwx 1 root root 32 Sep  5  2014 autoindex.conf -> ../mods-available/autoindex.conf
lrwxrwxrwx 1 root root 32 Sep  5  2014 autoindex.load -> ../mods-available/autoindex.load
lrwxrwxrwx 1 root root 26 Sep  5  2014 cgi.load -> ../mods-available/cgi.load
lrwxrwxrwx 1 root root 30 Sep  5  2014 deflate.conf -> ../mods-available/deflate.conf
lrwxrwxrwx 1 root root 30 Sep  5  2014 deflate.load -> ../mods-available/deflate.load
lrwxrwxrwx 1 root root 26 Sep  5  2014 dir.conf -> ../mods-available/dir.conf
lrwxrwxrwx 1 root root 26 Sep  5  2014 dir.load -> ../mods-available/dir.load
lrwxrwxrwx 1 root root 26 Sep  5  2014 env.load -> ../mods-available/env.load
lrwxrwxrwx 1 root root 27 Sep  5  2014 mime.conf -> ../mods-available/mime.conf
lrwxrwxrwx 1 root root 27 Sep  5  2014 mime.load -> ../mods-available/mime.load
lrwxrwxrwx 1 root root 34 Sep  5  2014 negotiation.conf -> ../mods-available/negotiation.conf
lrwxrwxrwx 1 root root 34 Sep  5  2014 negotiation.load -> ../mods-available/negotiation.load
lrwxrwxrwx 1 root root 32 Sep 12  2014 passenger.conf -> ../mods-available/passenger.conf
lrwxrwxrwx 1 root root 32 Sep 12  2014 passenger.load -> ../mods-available/passenger.load
lrwxrwxrwx 1 root root 27 Sep  5  2014 php5.conf -> ../mods-available/php5.conf
lrwxrwxrwx 1 root root 27 Sep  5  2014 php5.load -> ../mods-available/php5.load
lrwxrwxrwx 1 root root 33 Sep  5  2014 reqtimeout.conf -> ../mods-available/reqtimeout.conf
lrwxrwxrwx 1 root root 33 Sep  5  2014 reqtimeout.load -> ../mods-available/reqtimeout.load
lrwxrwxrwx 1 root root 40 Sep 14  2014 rewrite.load -> /etc/apache2/mods-available/rewrite.load
lrwxrwxrwx 1 root root 31 Sep  5  2014 setenvif.conf -> ../mods-available/setenvif.conf
lrwxrwxrwx 1 root root 31 Sep  5  2014 setenvif.load -> ../mods-available/setenvif.load
lrwxrwxrwx 1 root root 36 Jun  7  2015 ssl.conf -> /etc/apache2/mods-available/ssl.conf
lrwxrwxrwx 1 root root 36 Jun  7  2015 ssl.load -> /etc/apache2/mods-available/ssl.load
lrwxrwxrwx 1 root root 29 Sep  5  2014 status.conf -> ../mods-available/status.conf
lrwxrwxrwx 1 root root 29 Sep  5  2014 status.load -> ../mods-available/status.load
apache-2.2
  • 2 2 个回答
  • 6057 Views

2 个回答

  • Voted
  1. Best Answer
    Freddy
    2019-01-31T12:38:56+08:002019-01-31T12:38:56+08:00

    这取决于您的 apache 使用的是哪个 mpm 模块(mpm_worker/mpm_prefork/mpm_event)。如果您不确定,请发布其输出,cat /etc/apache2/mods-enabled/mpm*.conf其中显示StartServers/MinSpareServers/MaxSpareServers、MaxRequestWorkers以及ThreadsPerChild和ThreadLimit的数量。如果您的 linux 发行版中的文件名应该不同,则发布您启用的模块的输出ls -l /etc/apache2/mods-enabled。

    它应该看起来像这样并解释自己(Debian,Apache2.4):

    root@debian:/# cat /etc/apache2/mods-enabled/mpm*.conf
    # prefork MPM
    # StartServers: number of server processes to start
    # MinSpareServers: minimum number of server processes which are kept spare
    # MaxSpareServers: maximum number of server processes which are kept spare
    # MaxRequestWorkers: maximum number of server processes allowed to start
    # MaxConnectionsPerChild: maximum number of requests a server process serves
    
    <IfModule mpm_prefork_module>
        StartServers             5
        MinSpareServers       5
        MaxSpareServers      10
    
        # same as MaxClients in Apache 2.2
        MaxRequestWorkers     150
        MaxConnectionsPerChild   0
    </IfModule>
    
    # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
    

    请参阅减少 Apache 内存使用和平均进程大小值

    文档说(如上面的链接中所述):

    您可以而且应该控制 MaxClients 设置,这样您的服务器就不会产生太多的子节点,以至于它开始交换。执行此操作的过程很简单:通过诸如 top 之类的工具查看进程列表来确定平均 Apache 进程的大小,并将其划分为总可用内存,为其他进程留出一些空间。 https://httpd.apache.org/docs/2.2/misc/perf-tuning.html

    例子:

    Tasks: 207 total,   1 running, 206 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  2.4 us,  0.8 sy,  0.0 ni, 96.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem : 16307588 total, 14360744 free,  1188636 used,   758208 buff/cache
    KiB Swap:        0 total,        0 free,        0 used. 14686936 avail Mem 
    
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                 
     6567 www-data  20   0  296028  15288   5616 S   0.0  0.1   0:00.07 apache2                                                                 
     6569 www-data  20   0  296040  15360   5676 S   0.0  0.1   0:00.08 apache2                                                                 
     6571 www-data  20   0  295996  15200   5676 S   0.0  0.1   0:00.07 apache2                                                                 
     6572 www-data  20   0  296028  15348   5676 S   0.0  0.1   0:00.08 apache2                                                                 
     6573 www-data  20   0  296040  15356   5676 S   0.0  0.1   0:00.07 apache2
    

    从上面的链接页面运行很酷的脚本给了我:

    root@debian:~# ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Process Size (MB): "x/((y-1)*1024)}'
    Apache Memory Usage (MB): 100.711
    Average Process Size (MB): 16.7852
    

    注意:“平均进程大小”是运行时的“RES”值top。

    要确定MaxClients(又名MaxRequestWorkers),我需要计算:

    Maxclients=X/Y where
       X=Max. Available Memory Reserved for Apache
       Y=Average Process Size
    
    • 6
  2. CHEAH MING TI
    2020-07-11T04:50:08+08:002020-07-11T04:50:08+08:00

    通过运行以下命令检查您的 apache 正在使用的 mpm 模块 (mpm_worker/mpm_prefork/mpm_event):httpd -V

    使用该信息,访问 apache 站点(例如 prefork 或 worker 或事件 https://httpd.apache.org/docs/2.4/mod/prefork.html 或 worker.html 或 event.html)以查看所需的配置。我正在使用具有以下设置的 prefork:

    <IfModule mpm_prefork_module>
         ServerLimit         800
         StartServers        5 
         MinSpareServers     10 
         MaxRequestWorkers   800  
    </IfModule>
    

    在哪里

    • ServerLimit=MaxRequestWorkers 的最大值
    • StartServers=启动时创建的子服务器数量
    • MinSpareSevers=最小空闲进程数,即未处理请求的进程(默认值=5)
    • MaxSpareServers=最大空闲进程数,即未处理请求的进程(默认值=10)。如果空闲进程>MaxSpareServers,父进程将杀死多余的进程。由于未设置,因此我使用默认值
    • MaxRequestWorkers=同时服务请求的限制
    • 0

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve