故障排除#
如果您遇到技术问题并且在其他部分找不到解决方案,请在 社区论坛 或 Telegram 频道 上提问。
客户技术支持:
调试日志#
在执行自我诊断或按照技术支持建议进行操作之前,应启用调试日志。
为此,请使用支持调试的可执行文件运行 Angie:
在 Linux 的 预构建包 中,angie-debug
文件是启用调试日志构建的:
$ ls -l /usr/sbin/ | grep angie
lrwxrwxrwx 1 root root 13 Sep 21 18:58 angie -> angie-nodebug
-rwxr-xr-x 1 root root 1561224 Sep 21 18:58 angie-debug
-rwxr-xr-x 1 root root 1426056 Sep 21 18:58 angie-nodebug
配置运行 angie-debug
:
$ sudo ln -fs angie-debug /usr/sbin/angie
$ sudo angie -t && sudo service angie upgrade
这将启动 实时可执行文件升级。
调试后要恢复到常规可执行文件:
$ sudo ln -fs angie-nodebug /usr/sbin/angie
$ sudo angie -t && sudo service angie upgrade
在 FreeBSD 的 预构建包 中,angie-debug
文件是启用调试日志构建的:
$ ls -l /usr/local/sbin/ | grep angie
lrwxrwxrwx 1 root root 13 Sep 21 18:58 angie -> angie-nodebug
-rwxr-xr-x 1 root root 1561224 Sep 21 18:58 angie-debug
-rwxr-xr-x 1 root root 1426056 Sep 21 18:58 angie-nodebug
配置运行 angie-debug
:
$ sudo ln -fs angie-debug /usr/local/sbin/angie
$ sudo angie -t && sudo service angie upgrade
这将启动 实时可执行文件升级。
调试后要恢复到常规可执行文件:
$ sudo ln -fs angie-nodebug /usr/local/sbin/angie
$ sudo angie -t && sudo service angie upgrade
在 模板化 Docker 镜像 中,您可以通过覆盖 ANGIE_BINARY
环境变量切换到调试版本:
$ docker run -it --rm -e ANGIE_BINARY="angie-debug" \
docker.angie.software/angie:templated
当从源构建 Angie 时,编译前 启用调试:
$ ./configure --with-debug ...
安装后,angie -V 可以验证是否启用了调试日志:
$ angie -V
...
configure arguments: --with-debug ...
备注
使用支持调试的可执行文件可能会略微降低性能;启用调试日志可能会显著降低性能并增加磁盘空间使用。
要启用调试日志,请在配置中使用 error_log 指令设置 debug
级别:
error_log /path/to/log debug;
并重新加载配置:
$ sudo angie -t && sudo service angie reload
在启用调试日志的 模板化 Docker 镜像 中,您也可以使用 ANGIE_ERROR_LOG_SEVERITY
环境变量:
$ docker run -it --rm -e ANGIE_BINARY="angie-debug" \
-e ANGIE_ERROR_LOG_SEVERITY="debug" \
docker.angie.software/angie:templated
如果切换到不支持调试的可执行文件但在 error_log 指令中保留 debug
级别,Angie 将以 info
级别记录条目。
在配置中覆盖 error_log 而不指定 debug
级别将禁用调试日志。在此处,在 server 级别覆盖日志会为单个服务器禁用调试日志:
error_log /path/to/log debug;
http {
server {
error_log /path/to/log;
# ...
要避免这种情况,请移除覆盖 error_log 的行,或在其中设置 debug
级别:
error_log /path/to/log debug;
http {
server {
error_log /path/to/log debug;
# ...
指令位置#
error_log 指令的位置会影响收集的调试信息的完整性。
在较低配置级别(例如,在 server
或 location
块内)指定的指令会覆盖在较高级别(例如,在主配置级别或 http
块内)指定的日志设置。
为特定服务器禁用调试日志
如果全局启用了调试日志,但为单个服务器指定了不带 debug
级别的 error_log,则不会为该服务器收集调试信息。
error_log /var/log/angie/error.log debug; # 全局调试日志
http {
server {
listen 80;
server_name example.com;
error_log /var/log/angie/example.com.error.log;
# example.com 的调试日志被禁用,文件包含 info 级别
# ...
}
server {
listen 80;
server_name another.com;
# 此服务器将使用全局调试日志
# ...
}
}
在服务器级别保留调试日志
要为特定服务器保留调试信息收集但将其定向到不同的文件,您必须同时指定 debug
级别:
error_log /var/log/angie/error.log debug; # 全局调试日志
http {
server {
listen 80;
server_name example.com;
error_log /var/log/angie/example.com.error.log debug;
# example.com 的调试日志已启用但写入单独的文件
# ...
}
}
因此,要全局启用调试日志但为单个块覆盖日志文件,也请在这些覆盖中指定 debug
级别。否则,如果在 error_log 指令中未指定日志级别,将默认使用 error
级别,这些块的调试信息将丢失。
记录特定地址#
您可以仅为 指定的客户端地址 启用调试日志:
error_log /path/to/log;
events {
debug_connection 192.168.1.1;
debug_connection 192.168.10.0/24;
}
循环内存缓冲区#
调试日志可以写入循环内存缓冲区:
error_log memory:32m debug;
在 debug
级别写入内存缓冲区即使在高负载下也不会显著影响性能。在这种情况下,可以使用 GDB 脚本提取日志,例如:
set $log = ngx_cycle->log
while $log->writer != ngx_log_memory_writer
set $log = $log->next
end
set $buf = (ngx_log_memory_buf_t *) $log->wdata
dump binary memory debug_log.txt $buf->start $buf->end
核心转储#
核心转储有助于调查崩溃。在 联系支持 时请包含它们。对于从 我们的仓库 构建的版本,我们在特殊包中提供调试符号。它们与原始包同名,但添加了 -dbg
后缀,例如 angie-dbg
。
备注
本节假设您以 root
用户身份运行 Angie(推荐)。
Linux: systemd#
要在将 Angie 作为 systemd 服务运行时启用核心转储保存(例如,当 从包安装 时),请修改 /lib/systemd/system/angie.service
文件中的 服务设置:
[Service]
...
LimitCORE=infinity
LimitNOFILE=65535
或更新 /etc/systemd/system.conf
文件中的 全局设置:
[Manager]
...
DefaultLimitCORE=infinity
DefaultLimitNOFILE=65535
然后重新加载服务配置并重启 Angie 以重现崩溃条件:
$ sudo systemctl daemon-reload
$ sudo systemctl restart angie.service
崩溃后,查找核心转储文件:
$ sudo coredumpctl -1 # 可选
TIME PID UID GID SIG COREFILE EXE
--- 2025-07-17 11:05:40 GMT 1157 0 0 11 present /usr/sbin/angie
$ sudo ls -al /var/lib/systemd/coredump/ # 默认位置,另见 /etc/systemd/coredump.conf 和 /etc/systemd/coredump.conf.d/*.conf
...
-rw-r----- 1 root root 177662 Jul 27 11:05 core.angie.0.6135489c850b4fb4a74795ebbc1e382a.1157.1590577472000000.lz4
Linux: 手动配置#
检查 /etc/security/limits.conf
文件中的 核心转储设置,必要时修改它们:
root soft core 0 # 默认禁用核心转储
root hard core unlimited # 允许增加大小限制
然后使用 ulimit 增加核心转储大小限制,然后重启 Angie 以重现崩溃条件:
$ sudo ulimit -c unlimited
$ sudo cd <Angie 安装目录路径>
$ sudo sbin/angie # 或 sbin/angie-debug
崩溃后,查找核心转储文件:
$ sudo ls -al <Angie 工作目录路径> # 默认位置,见 /proc/sys/kernel/core_pattern
...
-rw-r----- 1 root root 177662 Jul 27 11:05 core.1157
FreeBSD#
检查 /etc/sysctl.conf
文件中的 核心转储设置,必要时修改它们:
kern.coredump=1 # 应为 1
kern.corefile=/path/to/core/files/%N.core # 需要正确路径
或在运行时更新设置:
$ sudo sysctl kern.coredump=1
$ sudo sysctl kern.corefile=/path/to/core/files/%N.core
然后重启 Angie 以重现崩溃条件。 如果 Angie 作为服务安装:
$ sudo service angie restart
如果 Angie 手动安装:
$ sudo cd <Angie 安装目录路径>
$ sudo sbin/angie
崩溃后,查找核心转储文件:
$ sudo ls -al <核心转储文件路径>
...
-rw------- 1 root root 9912320 Jul 27 11:05 angie