<-
Apache HTTP 服务器 2.4 > Apache MPM通用指令

Apache MPM通用指令

描述:由多个多处理模块(MPM)实现的指令的集合
状态:MPM
支持Apache!

指令

错误修正清单

也可以看看

最佳

CoreDumpDirectory 指令

描述:转储核心之前Apache HTTP Server尝试切换的目录
句法:CoreDumpDirectory directory
默认:See usage for the default setting
内容:服务器配置
状态:MPM
模块:eventworkerprefork

这控制了在转储内核之前Apache httpd尝试切换到的目录。如果您的操作系统配置为在崩溃过程的工作目录中创建核心文件, CoreDumpDirectory则有必要从默认ServerRoot 目录更改工作目录,默认目录不能由服务器运行时的用户写入。

如果要使用核心转储进行调试,则可以使用此伪指令将其放置在其他位置。如果您的操作系统未配置为将核心文件写入崩溃进程的工作目录,则此指令无效。

Linux系统安全说明

在Linux上使用此指令可能允许系统上的其他进程(如果以类似的特权运行,例如CGI脚本)通过ptrace 系统调用附加到httpd子级。这可能会削弱对某些安全攻击的保护。不建议在生产系统上使用此指令。

Linux上的核心转储

如果Apache httpd以root身份启动并切换到另一个用户,则Linux内核将禁用核心转储,即使该进程的目录是可写的。Apache httpd(2.0.46及更高版本)可在Linux 2.4及更高版本上重新启用核心转储,但前提是您明确配置了CoreDumpDirectory

BSD上的核心转储

要在BSD系统(例如FreeBSD)上启用suid可执行文件的核心转储,请设置kern.sugid_coredump为1。

具体信号

CoreDumpDirectory 仅对一组致命信号进行处理:SIGFPE,SIGILL,SIGABORT,SIGSEGV和SIGBUS。

在某些操作系统上,SIGQUIT还会导致核心转储,但不会通过CoreDumpDirectoryEnableExceptionHook处理,因此核心位置完全由操作系统决定。

最佳

EnableExceptionHook 指令

描述:启用在崩溃后运行异常处理程序的钩子
句法:EnableExceptionHook On|Off
默认:EnableExceptionHook Off
内容:服务器配置
状态:MPM
模块:eventworkerprefork

出于安全原因,仅当服务器配置了该--enable-exception-hook选项时,此伪指令才可用。它启用了一个挂钩,该挂钩允许外部模块在孩子撞车后插入并执行某些操作。

已经有两个模块,mod_whatkilledus并且 mod_backtrace使用了这个钩子。请访问Jeff Trawick的EnableExceptionHook网站,以获取有关这些信息的更多信息。

最佳

GracefulShutdownTimeout 指令

描述:指定一个超时,在此超时后,正常关闭服务器将退出。
句法:GracefulShutdownTimeout seconds
默认:GracefulShutdownTimeout 0
内容:服务器配置
状态:MPM
模块:eventworkerprefork
兼容性:在2.2版和更高版本中可用

GracefulShutdownTimeout规定如何收到“优雅停止”信号后多少秒,服务器应继续运行,处理现有的连接。

将此值设置为零意味着服务器将无限期等待,直到所有剩余的请求都已完全满足为止。

最佳

指令

描述:服务器监听的IP地址和端口
句法:Listen [IP-address:]portnumber [protocol]
内容:服务器配置
状态:MPM
模块:eventworkerpreforkmpm_winntmpm_netwarempmt_os2
兼容性:协议参数在2.1.5中加入

Listen指令指示Apache httpd仅侦听特定的IP地址或端口。默认情况下,它响应所有IP接口上的请求。Listen 现在是必需的指令。如果它不在配置文件中,则服务器将无法启动。这是对Apache httpd以前版本的更改。

Listen指令告诉服务器在指定的端口或地址和端口组合上接受传入的请求。如果仅指定端口号,则服务器在所有接口上侦听给定的端口。如果提供了IP地址和端口,则服务器将侦听给定的端口和接口。

Listen可以使用多个指令来指定要侦听的地址和端口的数量。服务器将响应来自任何列出的地址和端口的请求。

例如,要使服务器接受端口80和8000上的连接,请使用:

Listen 80
Listen 8000

要使服务器接受两个指定接口和端口号上的连接,请使用

Listen 192.170.2.1:80
Listen 192.170.2.5:8000

IPv6地址必须用方括号括起来,如以下示例所示:

Listen [2001:db8::a00:20ff:fea7:ccea]:80

对于大多数配置,不需要可选的协议参数。如果未指定,https则是端口443 http的默认值,是所有其他端口的默认值。该协议用于确定哪个模块应处理请求,并通过AcceptFilter指令应用协议特定的优化 。

仅在非标准端口上运行时,才需要设置协议。例如,https在端口8443上运行站点:

Listen 192.170.2.1:8443 https

错误情况

Listen相同IP地址和端口的 多个指令将导致Address already in use 错误消息。

也可以看看

最佳

ListenBackLog 指令

描述:挂起连接队列的最大长度
句法:ListenBackLog backlog
默认:ListenBackLog 511
内容:服务器配置
状态:MPM
模块:eventworkerpreforkmpm_winntmpm_netwarempmt_os2

挂起的连接队列的最大长度。通常不需要调整。但是,在某些系统上,当受到TCP SYN泛洪攻击时,希望增加此数量。请参阅listen(2)系统调用的backlog参数 。

操作系统通常会将其限制为较小的数量。随操作系统的不同而不同。另请注意,许多操作系统并未完全使用指定为待办事项的列表,而是使用基于(但通常大于)设置值的数字。

最佳

ListenCoresBucketsRatio 指令

描述:CPU核心数(在线)与侦听器存储桶数之间的比率
句法:ListenCoresBucketsRatio ratio
默认:ListenCoresBucketsRatio 0 (disabled)
内容:服务器配置
状态:MPM
模块:eventworkerprefork
兼容性:在Apache HTTP Server 2.4.17中可用,其内核支持socket选项,SO_REUSEPORT并使用该选项(例如Linux 3.9及更高版本,但不支持SO_REUSEPORT * BSD 的当前实现)在侦听进程(或线程)套接字之间平均分配新连接。。

比率(在线)CPU内核的数量和听众桶的数目之间可以用来使Apache HTTP服务器创建 num_cpu_cores / ratio听桶,每一个包含它自己Listen相同的端口(一个或多个)上-ing插座(多个),然后让每个孩子处理一个单独的存储桶(在创建孩子时按循环分配存储桶)。

“在线” CPU内核的含义

在Linux(以及BSD)上,如果 配置了Hotplug,则可以打开/关闭CPU内核 ,因此ListenCoresBucketsRatio在计算要创建的存储桶数时需要考虑此参数。

ListenCoresBucketsRatio当接受新连接成为瓶颈时,可以提高可伸缩性。在具有大量CPU内核的系统上,启用此功能已经过测试,显示出显着的性能改进和更短的响应时间。

要使之处于活动状态,CPU核的数量必须至少比配置的比率多两倍。推荐的 比率8,因此,16 使用此值时,至少内核应在运行时可用。需要为每个目标系统计算正确的比率以获得最大性能,测试多个值并观察关键性能指标的变化。

该指令会影响MinSpareThreadsMaxSpareThreads下限值的计算 。子进程的数量必须是存储桶数量的倍数,才能最佳地接受连接。

Listen同一IP地址和端口上的多个er或Apache HTTP服务器

因此SO_REUSEPORT,在侦听套接字上设置该选项将允许多个进程(EUID例如,共享相同的进程root)绑定到相同的IP地址和端口,而在通常情况下系统不会出现绑定错误。

这也意味着以相同的方式配置IP:port并带有肯定值的Apache httpd的多个实例也ListenCoresBucketsRatio 将开始运行而不会出现错误,然后在传入连接在两个实例之间均匀分布的情况下运行(在任何情况下,这都不是建议或明智的用法,但是只是一个通知,它将阻止发现此类可能的问题)。

在同一实例中,如果Listen在完全相同的IP(或主机名)和端口上配置了多个指令,Apache httpd将检查并无法启动,从而避免了创建一些重复的存储桶,这些存储桶是无用的,并且会降低性能。但是,它不能(也不会更努力地)捕获所有可能重叠的情况(例如将主机名解析为其他地方使用的IP)。

最佳

MaxConnectionsPerChild 指令

描述:限制单个子级服务器在其生存期内要处理的连接数
句法:MaxConnectionsPerChild number
默认:MaxConnectionsPerChild 0
内容:服务器配置
状态:MPM
模块:eventworkerpreforkmpm_winntmpm_netwarempmt_os2
兼容性:可用的Apache HTTP Server 2.3.9和更高版本。MaxRequestsPerChild仍然支持旧名称 。

MaxConnectionsPerChild指令设置单个子服务器进程将处理的连接数限制。后 MaxConnectionsPerChild连接,子进程就会死亡。如果MaxConnectionsPerChild0,则该过程将永不过期。

设置MaxConnectionsPerChild为非零值将限制进程因(偶然)内存泄漏而消耗的内存量。

最佳

MaxMemFree 指令

描述:主分配器无需调用即可保留的最大内存量 free()
句法:MaxMemFree KBytes
默认:MaxMemFree 2048
内容:服务器配置
状态:MPM
模块:eventworkerpreforkmpm_winntmpm_netware

MaxMemFree指令规定,每一个分配器被允许保留,而无需调用的自由字节的最大数量free()。在线程MPM中,每个线程都有自己的分配器。设置为零时,阈值将设置为无限制。

最佳

MaxRequestWorkers 指令

描述:同时处理的最大连接数
句法:MaxRequestWorkers number
默认:See usage for details
内容:服务器配置
状态:MPM
模块:eventworkerprefork

MaxRequestWorkers指令设置了将同时服务的请求数的限制。任何超出MaxRequestWorkers 限制的连接尝试通常都会排队,最多可以根据ListenBacklog 指令进行排队 。一旦在另一个请求结束时释放了子进程,则将为连接提供服务。

对于非线程服务器(prefork), MaxRequestWorkers转换成将要推出的服务请求的子进程的最大数量。默认值为256; 要增加它,您还必须加注 ServerLimit

对于线程服务器和混合服务器(例如 eventworker),MaxRequestWorkers限制可用于服务客户端的线程总数。对于混合的MPM,默认值是16ServerLimit)乘以的值 25ThreadsPerChild)。因此,要增加到MaxRequestWorkers需要超过16个过程的值,还必须提高ServerLimit

MaxRequestWorkersMaxClients在2.3.13版之前被调用 。仍然支持旧名称。

最佳

MaxSpareThreads 指令

描述:最大空闲线程数
句法:MaxSpareThreads number
默认:See usage for details
内容:服务器配置
状态:MPM
模块:eventworkermpm_netwarempmt_os2

最大空闲线程数。不同的MPM处理此指令的方式有所不同。

对于workerevent,默认值为 MaxSpareThreads 250。这些MPM在服务器范围内处理空闲线程。如果服务器中的空闲线程过多,则子进程将被杀死,直到空闲线程的数量小于该数量为止。如果ListenCoresBucketsRatio 启用,可能会创建其他进程/线程。

对于mpm_netware默认为 MaxSpareThreads 100。由于此MPM运行单个进程,因此备用线程数也在服务器范围内。

mpmt_os2与...类似mpm_netware。对于 mpmt_os2默认值10

限制条件

MaxSpareThreads值的范围受到限制。Apache httpd将根据以下规则自动更正给定值:

也可以看看

最佳

MinSpareThreads 指令

描述:可用于处理请求峰值的最小空闲线程数
句法:MinSpareThreads number
默认:See usage for details
内容:服务器配置
状态:MPM
模块:eventworkermpm_netwarempmt_os2

处理请求峰值的最小空闲线程数。不同的MPM处理此指令的方式有所不同。

worker并在服务器范围内event使用默认值 MinSpareThreads 75并处理空闲线程。如果服务器中没有足够的空闲线程,则将创建子进程,直到空闲线程的数量大于number为止。如果ListenCoresBucketsRatio 启用,可能会创建其他进程/线程。

mpm_netware使用默认值, MinSpareThreads 10并且由于它是单进程MPM,因此在服务器范围内对其进行跟踪。

mpmt_os2与...类似mpm_netware。对于 mpmt_os2默认值5

也可以看看

最佳

PidFile 指令

描述:服务器记录守护程序的进程ID的文件
句法:PidFile filename
默认:PidFile logs/httpd.pid
内容:服务器配置
状态:MPM
模块:eventworkerpreforkmpm_winntmpmt_os2

PidFile指令设置到服务器记录守护程序的进程ID文件。如果文件名不是绝对的,则假定它是相对于的 ServerRoot

PidFile /var/run/apache.pid

能够向服务器发送信号,以便关闭服务器,然后重新打开其ErrorLogTransferLog,并重新读取其配置文件,通常很有用。这是通过将SIGHUP(kill -1)信号发送到中列出的进程ID来完成的 PidFile

PidFile受有关日志文件的位置和相同的警告信息的安全

注意

从Apache HTTP Server 2开始,我们建议您仅使用apachectl脚本或操作系统提供的初始化脚本来(重新)启动或停止服务器。

最佳

ReceiveBufferSize 指令

描述:TCP接收缓冲区大小
句法:ReceiveBufferSize bytes
默认:ReceiveBufferSize 0
内容:服务器配置
状态:MPM
模块:eventworkerpreforkmpm_winntmpm_netwarempmt_os2

服务器会将TCP接收缓冲区大小设置为指定的字节数。

如果设置为0,则服务器将使用操作系统默认值。

最佳

ScoreBoardFile 指令

描述:用于存储子流程的协调数据的文件的位置
句法:ScoreBoardFile file-path
默认:ScoreBoardFile logs/apache_runtime_status
内容:服务器配置
状态:MPM
模块:eventworkerpreforkmpm_winnt

Apache HTTP Server使用记分板在其父进程和子进程之间进行通信。一些体系结构需要一个文件来促进这种通信。如果未指定文件,则Apache httpd首先尝试完全在内存中创建记分板(使用匿名共享内存),否则,将尝试在磁盘上创建文件(使用基于文件的共享内存)。指定此伪指令将导致Apache httpd始终在磁盘上创建文件。

ScoreBoardFile /var/run/apache_runtime_status

基于文件的共享内存对于需要直接访问记分板的第三方应用程序很有用。

如果使用ScoreBoardFile,则将其放在RAM磁盘上可能会提高速度。但是请注意,请注意有关日志文件放置和安全性的相同警告。

也可以看看

最佳

SendBufferSize 指令

描述:TCP缓冲区大小
句法:SendBufferSize bytes
默认:SendBufferSize 0
内容:服务器配置
状态:MPM
模块:eventworkerpreforkmpm_winntmpm_netwarempmt_os2

将服务器的TCP发送缓冲区大小设置为指定的字节数。在高速,高延迟的连接( 100ms左右,例如跨大陆快速管道)上设置超过OS的标准默认值通常很有用。

如果设置为0,则服务器将使用操作系统提供的默认值。

可能需要对操作系统进行进一步的配置才能在高速,高延迟的连接上获得更好的性能。

在某些操作系统上,SendBufferSize除非EnableSendfile将其设置为OFF,否则可能看不到 TCP行为的改变。此交互仅适用于静态文件。

最佳

ServerLimit 指令

描述:可配置进程数的上限
句法:ServerLimit number
默认:See usage for details
内容:服务器配置
状态:MPM
模块:eventworkerprefork

对于preforkMPM,此伪指令设置MaxRequestWorkersApache httpd进程生存期内的最大配置值。对于workerevent MPM,此伪指令与一起ThreadLimit设置MaxRequestWorkersApache httpd进程生存期内的最大配置值。对于eventMPM,此伪指令还定义了可以继续运行并完成对打开的连接的处理的旧服务器进程数。在重新启动期间更改此指令的任何尝试将被忽略,但 MaxRequestWorkers可以在重新启动期间进行修改。

使用此指令时必须特别注意。如果 ServerLimit将其设置为比必要值高得多的值,则会分配额外的未使用共享内存。如果将ServerLimitMaxRequestWorkers都设置为高于系统可以处理的值,则Apache httpd可能无法启动,或者系统可能变得不稳定。

对于preforkMPM,仅当您需要设置MaxRequestWorkers大于256(默认值)时才使用此伪指令。请勿将此指令的值设置为高于您可能要设置的值MaxRequestWorkers

使用worker,仅当您的MaxRequestWorkers ThreadsPerChild 设置需要超过16个服务器进程时才使用此伪指令 (默认)。不要设置该指令的任何比你可能想什么所需的服务器进程的数目更高的价值MaxRequestWorkers ThreadsPerChild

随着event,增加该指令如果由你定义的流程数量MaxRequestWorkersThreadsPerChild设置,以及正常关闭进程的数量,超过16个服务器进程(默认)。

注意

ServerLimit 20000编译到服务器中存在硬限制(对于preforkMPM 200000)。这样做是为了避免错别字引起的令人讨厌的影响。为了使其进一步超过此限制,您将需要修改mpm源文件中的MAX_SERVER_LIMIT值并重建服务器。

也可以看看

最佳

StartServers 指令

描述:启动时创建的子服务器进程数
句法:StartServers number
默认:See usage for details
内容:服务器配置
状态:MPM
模块:eventworkerpreforkmpmt_os2

StartServers指令设置启动时创建的子服务器进程的数量。如根据负载动态地控制的过程的数量,(见 MinSpareThreadsMaxSpareThreadsMinSpareServersMaxSpareServers)通常有什么理由调整此参数。

缺省值因MPM而异。workerevent默认为StartServers 3; prefork默认为5; mpmt_os2 默认为2

最佳

StartThreads 指令

描述:启动时创建的线程数
句法:StartThreads number
默认:See usage for details
内容:服务器配置
状态:MPM
模块:mpm_netware

启动时创建的线程数。如根据负载动态地控制线程的数量,(见 MinSpareThreadsMaxSpareThreadsMinSpareServersMaxSpareServers)通常有什么理由调整此参数。

对于mpm_netware默认值为 StartThreads 50and,因为只有一个进程,所以这是在启动时为服务请求而创建的线程总数。

最佳

ThreadLimit 指令

描述:设置每个子进程的可配置线程数上限
句法:ThreadLimit number
默认:See usage for details
内容:服务器配置
状态:MPM
模块:eventworkermpm_winnt

该伪指令ThreadsPerChild为Apache httpd进程的生存期设置最大配置值。重新启动期间更改此伪指令的任何尝试都将被忽略,但ThreadsPerChild可以在重新启动期间进行修改,直到此伪指令的值。

使用此指令时必须特别注意。如果 ThreadLimit将其设置为远远大于的值ThreadsPerChild,则会分配额外的未使用共享内存。如果将 ThreadLimitThreadsPerChild都设置为高于系统可以处理的值,则Apache httpd可能无法启动,或者系统可能变得不稳定。请勿将此指令的值设置为高于ThreadsPerChild当前运行的Apache httpd的最大预测设置。

其缺省值ThreadLimit1920当用于mpm_winnt64与他人使用时。

注意

有一个硬性限制ThreadLimit 20000(或 ThreadLimit 100000eventThreadLimit 15000mpm_winnt编译到服务器)。这样做是为了避免错别字引起的令人讨厌的影响。为了使其进一步超过此限制,您将需要修改mpm源文件中的MAX_THREAD_LIMIT值并重建服务器。

最佳

ThreadsPerChild 指令

描述:每个子进程创建的线程数
句法:ThreadsPerChild number
默认:See usage for details
内容:服务器配置
状态:MPM
模块:eventworkermpm_winnt

该指令设置每个子进程创建的线程数。子级在启动时创建这些线程,而从不创建更多线程。如果使用MPM之类的MPM mpm_winnt,其中只有一个子进程,则此数字应足够大以处理服务器的整个负载。如果使用MPM之类的MPM worker,其中有多个子进程,则线程总数应足够高以处理服务器上的常见负载。

其缺省值ThreadsPerChild64当用于mpm_winnt25与他人使用时。

的值ThreadsPerChild不能超过的值ThreadLimit。如果配置了更高的值,它将在启动时自动减小并记录警告。这两个指令之间的关系在中进行了说明ThreadLimit

最佳

ThreadStackSize 指令

描述:处理客户端连接的线程使用的堆栈大小(以字节为单位)
句法:ThreadStackSize size
默认:65536 on NetWare; varies on other operating systems
内容:服务器配置
状态:MPM
模块:eventworkermpm_winntmpm_netwarempmt_os2
兼容性:在Apache HTTP Server 2.1和更高版本中可用

ThreadStackSize指令设置用于处理客户端连接并调用模块以帮助处理这些连接的线程堆栈(用于自动数据)的大小。在大多数情况下,操作系统默认的堆栈大小是合理的,但是在某些情况下可能需要对其进行调整:

建议不要减少,ThreadStackSize 除非每个子进程需要大量线程。在某些平台(包括Linux)上,设置128000已经太低,导致某些常用模块崩溃。

可用语言: de  |  zh  |  fr  |  ja  |  TR 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。