最近在 Ubuntu 上运行深信服 aTrust 时,发现 apport 进程会不定期占用较高 CPU。
一开始查看:
ps -ef | grep -E 'apport|aTrust'
发现 apport 是因为 aTrustTray2 崩溃后被系统拉起,且 aTrustTray2 的 PID 一直变化,说明它在反复:
启动 → 崩溃 → 被重新拉起
崩溃信号为:
SIGABRT
进一步手动运行:
QT_DEBUG_PLUGINS=1 \
/usr/share/sangfor/aTrust/resources/bin/aTrustTray2 -l zh-CN
发现报错:
This application failed to start because it could not find or load the Qt platform plugin "xcb"
继续检查发现,aTrust 自己其实已经带了 libqxcb.so:
find /usr/share/sangfor/aTrust -name 'libqxcb.so'
结果:
/usr/share/sangfor/aTrust/resources/lib/libqxcb.so
但 aTrustTray2 默认搜索的路径却是:
/usr/share/sangfor/aTrust/resources/bin/platforms
而这个目录不存在。
最终通过创建目录并添加软链接解决:
sudo mkdir -p /usr/share/sangfor/aTrust/resources/bin/platforms
sudo ln -s \
/usr/share/sangfor/aTrust/resources/lib/libqxcb.so \
/usr/share/sangfor/aTrust/resources/bin/platforms/libqxcb.so
修复后,aTrustTray2 不再反复崩溃,apport 也不再持续占用 CPU。
问题本质上是:
aTrust 自带 Qt xcb 插件
↓
插件实际位于 resources/lib
↓
程序却只搜索 resources/bin/platforms
↓
找不到插件后 SIGABRT
↓
apport 不断处理崩溃
如果以后升级或重装 aTrust 后问题再次出现,可以优先检查:
ls -l /usr/share/sangfor/aTrust/resources/bin/platforms/libqxcb.so
看这个软链接是否还存在。
发表回复