常见问题
查看日志
如果系统工作不正常或者没有数据,通常可以从日志里获取更多的信息来定位问题。
汇总进程日志: /opt/tingyun-php/logs/daemon.log
PHP扩展日志: /opt/tingyun-php/logs/php-agent.log
运行:
ll /opt/tingyun-php/logs
正常情况下会存在2个日志( daemon.log 和php-agent.log)。
如果php-agent.log不存在说明PHP扩展有问题,请检查PHP扩展模块。
如果daemon.log不存在说明汇总进程有问题,请检查汇总进程。
如果2个日志都存在说明安装没有问题,请运行:
grep -E 'CRITICAL|ERROR|error' /opt/tingyun-php/logsh/php-agent.log
如果php-agent输出有ERROR信息,说明PHP扩展运行时有错误。
grep -E 'CRITICAL|ERROR|error' /opt/tingyun-php/logs/daemon.log
如果daemon输出有ERROR信息,说明可能和服务器通信有问题。
默认情况,日志级别为info, 审计模式是关闭的,这种情况得到的信息量比较小。 通过修改日志级别为debug,开启审计模式,让汇总进程和php扩展输出更多日志信息,通过日志得到的信息定位问题。
检查PHP扩展模块
将info.php放在网站某个目录下。
echo "<?php phpinfo(); ?>" > /path/to/info.php
通过浏览器访问info.php。
查找页面内是否存在tingyun扩展。
正常情况下的信息和以下截图类似:
若没有tingyun模块信息,请重新安装扩展模块。
重新安装后,如果仍未出现tingyun模块信息,则很有可能您的PHP版本不符合安装条件。
检查汇总进程
确认汇总进程文件是否存在。
ll /opt/tingyun-php/bin/php-daemon
如果 /opt/tingyun-php/bin/php-daemon 不存在,说明被误删了,请重新安装探针。
确认汇总进程在运行。
ps -e | grep php-daemon
正常情况下的信息和以下截图类似:
如果php-daemon进程不存在,请重启Web Server。
sudo service httpd restart
或
sudo service php-fpm restart
然后再次运行
ps -e | grep php-daemon
,查看输出结果。
php-agent日志错误处理:
- 当出现大量 Resource temporarily unavailable 错误时,例如
ERROR: connect socket /opt/tingyun-oneagent/run/daemon.sock fail: Resource temporarily unavailable
可能是服务器设置的ulimit数量不足造成php扩展和daemon进程通讯出现问题,因为每个php-fpm的worker都会和daemon进程打开一个文件句柄进行通讯,当php-fpm的worker数量超过ulimit -n的数量时,会造成文件句柄超过限制而通讯失败。
问题确认:
普通探针使用 ps -ef | grep php-daemon
确认daemon进程的pid
tingyunagent探针使用 ps -ef | grep transagent
确认daemon进程的pid
查看daemon进程的pid对应的limits中 Max open files
限制
cat /proc/[pid]/limits
查看daemon进程实际打开文件数
ls /proc/[pid]/fd | wc -l
如果实际打开文件数已经接近limits中 Max open files
限制,需调整limits限制
普通探针:
kill daemon进程 killall php-daemon
打开 PHP-FPM 的配置文件。通常该文件位于 /etc/php-fpm.conf 或 /etc/php-fpm.d/www.conf。
在配置文件中找到 rlimit_files 的行,如果找不到该行,则需要添加该行。该行的格式如下: rlimit_files = <soft limit>:<hard limit>
其中,
修改 rlimit_files = 65535:65535
保存文件并重新启动 PHP-FPM 服务
tingyunagent探针:
vi /opt/tingyun-oneagent/bin/cpphostdaemon
在start方法后添加ulimit -n,例如:
start() {
ulimit -n 100000
if [ -f "${AGENT_PATH}/cpp_version" ]; then
local version="$(cat ${AGENT_PATH}/cpp_version)"
local daemon=${AGENT_PATH}/cpp_${version}/bin/transagent
if [ -f "${daemon}" ]; then
echo "start ${daemon}"
export PHP_DAEMON_CONFIG="${CONF_PATH}/oneagent.conf:${CONF_PATH}/php.conf"
${daemon} -d -p "${RUN_PATH}/daemon.pid"
else
echo "Error: can not find ${daemon}"
fi
else
echo "Error: can not find ${AGENT_PATH}/cpp_version"
fi
}
然后重启服务
sudo systemctl restart tingyun-oneagent