配置 HTTPERR 错误日志记录,不断增长会沾满C盘导致服务器停机

配置 HTTP API 错误日志记录

HTTP \Parameters 键下的三个注册表值控制 HTTP API 错误日志记录。 这些密钥位于注册表项中: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

 备注

在 Windows 操作系统的更高版本中,配置值的位置和形式可能会更改。

必须具有管理员/本地系统凭据才能更改注册表值,以及查看或更改日志文件和包含它们的文件夹。

当 HTTP API 驱动程序启动时,将读取注册表值中的配置信息。 因此,如果更改设置,则必须停止,然后重启驱动程序以读取新值。 若要执行此操作,请键入以下控制台命令:

控制台
net stop http
net start http

以下命名约定用于命名日志文件:
httperr + 序列号 + .log
示例:httperr4.log

日志文件在达到 ErrorLogFileTruncateSize 注册表值指定的最大大小时循环。 此值不能小于 1 兆字节 (MB) 。

如果错误日志记录的配置无效,或者在 HTTP API 写入日志文件时发生任何类型的失败,则 HTTP API 使用事件日志记录通知管理员未发生错误日志记录。

下表描述了注册表配置值。

注册表值说明
EnableErrorLogging 可以设置为 TRUE 以启用错误日志记录的 DWORD,或设置为 FALSE 以禁用错误日志记录。 默认值为 TRUE。
ErrorLogFileTruncateSize 一个 DWORD,指定错误日志文件的最大大小(以字节为单位)。 默认值为 1 MB (0x100000) 。

指定的值不能小于默认值。
ErrorLoggingDir 一个字符串,指定 HTTP API 放置日志记录文件的文件夹。

HTTP API 在指定的文件夹中创建一个子文件夹 HTTPERR,然后将日志文件存储在子文件夹中。 此子文件夹和日志文件接收相同的权限设置。 管理员和本地系统帐户具有完全访问权限。 其他用户没有访问权限。

以下示例是未在注册表中指定文件夹时的默认文件夹:
%SystemRoot%\System32\LogFiles

ErrorLoggingDir 字符串值必须是完全限定的本地路径。 但是,它可以包含 %SystemRoot%。 无法使用网络驱动器或网络共享。

HTTP API 错误日志的格式

通常,HTTP API 错误日志文件的格式与 W3C 错误日志相同,但 HTTP API 错误日志文件不包含列标题。 HTTP API 错误日志的每一行都记录一个错误。 字段按特定顺序显示。 单个空格字符 (0x0020) 将每个字段与上一个字段分开。 在每个字段中,加上符号 (0x002B) 替换空格字符、选项卡和不可打印的控件字符。

下表标识了错误日志记录中的字段和字段顺序。

字段描述
日期 “日期”字段遵循 W3C 格式。 此字段基于协调世界时 (UTC) 。 日期字段始终为 10 个字符,格式为 YYYY-MM-DD。 例如,2003 年 5 月 1 日表示为 2003-05-01。
时间 “时间”字段遵循 W3C 格式。 此字段基于 UTC。 时间字段始终为 MM:HH:SS 形式的 8 个字符。 例如,下午 5:30 (UTC) 表示为 17:30:00。
客户端 Internet 协议 (IP) 地址 受影响客户端的 IP 地址。 此字段中的值可以是 IPv4 地址或 IPv6 地址。 如果客户端 IP 地址是 IPv6 地址,则该地址中也包含 ScopeId 字段。
客户端端口 受影响客户端的端口号。
服务器 IP 地址 受影响服务器的 IP 地址。 此字段中的值可以是 IPv4 地址或 IPv6 地址。 如果服务器 IP 地址是 IPv6 地址,则该地址中也包含 ScopeId 字段。
服务器端口 受影响服务器的端口号。
协议版本 正在使用的协议的版本。

如果连接尚未经过足够的分析来确定协议版本,则连字符 (0x002D) 将用作空字段的占位符。

如果分析的主要版本号或次要版本号大于或等于 10,则将该版本记录为 HTTP/?.?.
谓词 谓词表示最后一个经过分析的请求。 包括未知谓词,但超过 255 个字节的任何谓词将被截断为此长度。 如果谓词不可用,则连字符 (0x002D) 用作空字段的占位符。
CookedURL + 查询 与之关联的 URL 和任何查询都记录为一个字段,该字段由问号 (0x3F) 分隔。 此字段的长度限制为 4,096 字节时被截断。

如果 (“煮熟”) 分析此 URL,则会使用本地代码页转换记录该 URL,并将其视为 Unicode 字段。

如果在日志记录时未 (“煮熟”) 分析此 URL,则会完全复制该 URL,而无需进行任何 Unicode 转换。

如果 HTTP API 无法分析此 URL,则连字符 (0x002D) 将用作空字段的占位符。
协议状态 协议状态不能大于 999。

如果对请求的响应的协议状态可用,它将记录在此字段中。

如果协议状态不可用,则连字符 (0x002D) 将用作空字段的占位符。
SiteId 未在此版本的 HTTP API 中使用。 占位符连字符 (0x002D) 始终显示在此字段中。
原因短语 此字段包含一个字符串,用于标识正在记录的错误类型。 此字段永远不会留空。
队列名称 这是请求队列名称。

以下示例行来自 HTTP API 错误日志:

控制台
2002-07-05 18:45:09 172.31.77.6 2094 172.31.77.6 80 HTTP/1.1 GET /qos/1kbfile.txt 503 - ConnLimit  
2002-07-05 19:51:59 127.0.0.1 2780 127.0.0.1 80 HTTP/1.1 GET /ThisIsMyUrl.htm 400 - Hostname  
2002-07-05 19:53:00 127.0.0.1 2894 127.0.0.1 80 HTTP/2.0 GET / 505 - Version_N/S  
2002-07-05 20:06:01 172.31.77.6 64388 127.0.0.1 80 - - - - - Timer_MinBytesPerSecond

HTTP API 日志中的错误类型

HTTP API 会记录对客户端的错误响应、连接超时、孤立请求以及错误处理的已删除连接。

以下列表标识 HTTP API 记录的错误类型:

  • 对客户端的响应
    HTTP API 向客户端发送错误响应,例如,由上次收到的请求中的分析错误导致的 400 错误。 HTTP API 发送错误响应后,它将关闭连接。

  • 连接超时
    HTTP API 超时连接。 如果连接超时时请求处于挂起状态,则使用该请求在错误日志中提供有关连接的详细信息。

  • 孤立请求
    当仍有排队的请求路由到该进程时,用户模式进程意外停止。 HTTP API 会记录错误日志中的孤立请求。特定错误类型由“原因短语”字符串命名,这些字符串始终显示为每个错误行的最后一个字段。 下表标识了 HTTP API 原因短语。

原因短语说明
AppOffline HTTP 错误 503) (出现服务不可用错误。 服务不可用,因为应用程序错误导致应用程序脱机。
AppPoolTimer HTTP 错误 503) (出现服务不可用错误。 服务不可用,因为应用程序池进程太忙,无法处理请求。
AppShutdown HTTP 错误 503) (出现服务不可用错误。 服务不可用,因为应用程序会自动关闭以响应管理员策略。
BadRequest 处理请求时出现分析错误。
Client_Reset 在将请求分配给辅助角色进程之前,客户端与服务器之间的连接已关闭。 此行为的最常见原因是客户端过早地关闭了与服务器的连接。
Connection_Abandoned_By_AppPool 应用程序池中的辅助角色进程已意外退出或关闭其句柄,从而使挂起的请求孤立。
Connection_Abandoned_By_ReqQueue 应用程序池中的辅助角色进程已意外退出或关闭其句柄,从而使挂起的请求孤立。 特定于 Windows Vista 及更高版本以及 Windows Server 2008 及更高版本。
Connection_Dropped 在服务器发送其最终响应数据包之前,客户端和服务器之间的连接已关闭。 此行为的最常见原因是客户端过早地关闭了与服务器的连接。
Connection_Dropped_List_Full 客户端和服务器之间已删除连接的列表已满。 特定于 Windows Vista 及更高版本以及 Windows Server 2008 及更高版本。
ConnLimit HTTP 错误 503) (出现服务不可用错误。 该服务不可用,因为已达到或超过站点级别的连接限制。
Connections_Refused 内核 NonPagedPool 内存已降至 20 MB 以下,http.sys已停止接收新连接
Disabled HTTP 错误 503) (出现服务不可用错误。 该服务不可用,因为管理员已使应用程序脱机。
EntityTooLarge 实体超出了允许的最大大小。
FieldLength 超出字段长度限制。
禁止访问 (Forbidden) 分析时满足了禁止的元素或序列。
标头 标头中出现分析错误。
主机名称 处理主机名时发生分析错误。
内部 HTTP 错误 500) (发生内部服务器错误。
Invalid_CR/LF 发生了非法回车或换行。
LengthRequired 缺少所需的长度值。
不适用 HTTP 错误 503) (出现服务不可用错误。 服务不可用,因为) 发生内存分配失败或 URL 预留列表冲突等内部错误 (。
N/I HTTP 错误 501) (发生未实现的错误,或者由于未知的传输编码,在 HTTP 错误 503) (出现服务不可用错误。
数字 处理数字时出现分析错误。
前提 缺少必需的先决条件。
QueueFull HTTP 错误 503) (出现服务不可用错误。 该服务不可用,因为应用程序请求队列已满。
RequestLength 超出请求长度限制。
Timer_AppPool 连接已过期,因为请求在应用程序池队列中等待时间过长,服务器应用程序无法排入队列并对其进行处理。 此超时持续时间为 ConnectionTimeout。 默认情况下,此值设置为两分钟。
Timer_ConnectionIdle 连接已过期并保持空闲状态。 默认 ConnectionTimeout 持续时间为两分钟。
Timer_EntityBody 在请求实体正文到达之前,连接已过期。 当请求明确具有实体正文时,HTTP API 会打开Timer_EntityBody计时器。 首先,此计时器的限制设置为 ConnectionTimeout 值 (通常为两分钟) 。 每次收到此请求上的另一个数据指示时,HTTP API 都会重置计时器,以便 (或 ConnectionTimeout) 中指定的任何信息,再提供两分钟的连接。
Timer_HeaderWait 连接已过期,因为请求的标头分析所花费的时间超过两分钟的默认限制。
Timer_MinBytesPerSecond 连接已过期,因为客户端未以合理的速度接收响应。 响应发送速率比默认值 240 字节/秒慢。可以使用 MinFileBytesPerSec 元数据库属性进行控制。
Timer_ReqQueue 连接已过期,因为请求在应用程序池队列中等待过长,服务器应用程序无法排队。 此超时持续时间为 ConnectionTimeout。 默认情况下,此值设置为两分钟。 特定于 Windows Vista 及更高版本以及 Windows Server 2008 及更高版本。
Timer_Response 保留。 当前未使用。
Timer_SslRenegotiation 连接已过期,因为客户端和服务器之间的安全套接字层 (SSL) 重新协商所花费的时间比默认超时时间长两分钟。
URL 处理 URL 时出现分析错误。
URL_Length URL 超出了允许的最大大小。
谓词 处理谓词时出现分析错误。
Version_N/S HTTP 错误 505) (出现版本不受支持的错误。
posted @ 2024-03-05 14:54  苦逼的猿人  阅读(67)  评论(0编辑  收藏  举报