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 / 问题 / 714425
Accepted
sa289
sa289
Asked: 2015-08-16 14:12:24 +0800 CST2015-08-16 14:12:24 +0800 CST 2015-08-16 14:12:24 +0800 CST

Apache - 总是运行大量 httpd 进程的缺点

  • 772

始终运行大量备用 httpd 进程是否有任何问题?我进行了一项测试,我增加了 1,000,StartServers并MinSpareServers测量了内存使用量的增加,它只有 500MB。

鉴于此,我在想,既然我们有很多 RAM,为了在突发流量期间获得最佳性能,我们不妨将其StartServers设置MinSpareServers为 1,000 左右,当然还要设置ServerLimit和MaxRequestWorkers(以前MaxClients)设置为更高的值。

MaxConnectionsPerChild假设我们的服务器能够一次处理这么多请求并且我们将其用作防止内存泄漏的预防措施,这样做有什么我不知道的缺点吗?

作为任何认为每个 httpd 进程 0.5MB 不正确的人的旁注,据我所知,Apache 内存使用量远低于单个进程报告的原因top是它使用共享库。

apache-2.2
  • 3 3 个回答
  • 692 Views

3 个回答

  • Voted
  1. Thomas Vincent
    2015-08-16T14:49:25+08:002015-08-16T14:49:25+08:00

    您要避免的是传入请求导致新进程以高于旧进程可以服务旧连接的速率分叉。这种风险导致系统不断创建消耗可用内存的新进程并开始增加操作系统使用交换的频率。这反过来会导致磁盘 I/O 大幅增加,其中系统只是将页面从物理内存交换到虚拟内存(在磁盘上),反之亦然,对工作负载没有任何实际好处。

    开始的一般公式是:

    (总内存 - 操作系统内存 - 数据库内存)/每个 Apache 进程的大小。

    公式只是等式的一部分。你给系统和 MySQL 的内存越多,他们为你做的文件系统的缓存就越多,避免撞到非常昂贵的磁盘。如果数据库不在同一个系统上,那么这不是一个问题。

    如果您没有正确调整 Apache 并且交换频率增加,则会发生的另一种情况是用户开始点击停止并重新加载,人为地增加了服务器上的负载。您可以控制该MaxRequestWorkers设置,以使您的服务器不会产生太多的子节点以致于开始交换。看起来很简单,您只需通过诸如 top 或 smem 之类的工具查看进程列表来确定平均 Apache 进程的大小,然后将其划分为总可用内存,同时为其他进程留出足够的内存获得更准确的图像。

    此方案中的另一个关键参数是ServerLimit. 如果ServerLimit设置为远高于所需的值,则会分配额外的未使用的共享内存。如果两者ServerLimit都MaxRequestWorkers设置为高。Apache httpd 的性能和 Apache httpd 的整体稳定性可能会开始成为一个问题。

    • 1
  2. Best Answer
    womble
    2015-08-16T17:28:10+08:002015-08-16T17:28:10+08:00

    我担心你的测试方法。看来您只是在生成一大堆进程,然后查看它们的内存使用情况。问题在于,当它们第一次生成时,它们共享最大数量的内存,并且没有存储任何本地的、每个进程的数据。

    当您开始实际使用它们时,您会发现这些进程开始需要更多内存。即使在没有内存泄漏的情况下也是如此,但是如果您使用任何泄漏的扩展,问题就会变得非常糟糕,非常快。

    我建议在各种条件下进行大量实际负载测试,然后再让这样的配置在没有密切监督的情况下运行。

    • 1
  3. zerodeux
    2015-09-02T00:27:06+08:002015-09-02T00:27:06+08:00

    始终运行大量备用 httpd 进程没有问题。这实际上是个好主意。

    要点是:如果您希望 httpd 达到该进程数,则最好从一开始就达到并确保它有效。换句话说,不要自动缩放,只需预先缩放。少惊喜。

    第二点是:如果您不需要共享资源(在这种情况下主要是 RAM)或适应在服务器上不同时间运行的不同服务,那么随着时间的推移更改进程数量是没有意义的。为您的 httpd 分配 RAM 预算,并生成处理大量并发请求所需的实例。

    15 年前,人们会在一台服务器上共享很多东西,这使 httpds 的数量适应工作负载是有意义的。现在大多数人每个应用程序使用一个服务器:大多数时候不会使用它的所有资源,但性能更可预测,性能分析和调整更容易。

    尽管在特定情况下存在一个实际上很常见的问题:Apache + mod_php(或嵌入在任何 httpd 中的任何解释器)。这里 mod_php 完全改变了交易,因为它变成了应用程序缩放而不是 httpd 缩放的问题,这是另一个(冗长的)主题,并且需要不同的方法(1000 个预分叉的工作人员将无法工作)。

    • 1

相关问题

  • 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