[Problem feedback] 临时处理trayplugin-load 内存泄漏的个人用法。
Tofloor
poster avatar
xxxos
deepin
a day ago
Author

Deepin V25.1的 **trayplugin-load **进程一直内存泄漏,对于经常不关机的场景下,稍不注意,内存就爆了。论坛反映这个问题的人不少:

trayplugin-load 进程占用2.2GB内存

简单做了个脚本临时处理下。有同样问题的朋友可以参考下。

image.png

核心逻辑:找到所有 trayplugin-load 进程,取最大的 RSS(实际占用的物理内存),超过阈值就重启dde-shell。

重启后会发生什么(必现)

  1. 任务栏 / 桌面瞬间消失→重新加载(1–3 秒)
  2. 壁纸、桌面图标、任务栏图标全部刷新
  3. 托盘图标(QQ、微信、输入法等)会短暂消失,随后重新出现
  4. 所有已打开窗口(浏览器、文档、终端)都还在,不会关闭
  5. 桌面右键菜单恢复正常(如果之前卡死)

1、监控脚本如下

# 创建脚本
mkdir -p ~/.local/bin
cat > ~/.local/bin/monitor_tray.sh << 'EOF'
#!/bin/bash
PROCESS_NAME="trayplugin-load"
MEMORY_THRESHOLD_KB=524288
CHECK_INTERVAL=30
while true; do
    MAX_RSS=$(pgrep -x "$PROCESS_NAME" | xargs -I {} ps -o rss= -p {} 2>/dev/null | awk '{print $1}' | sort -nr | head -n1)
    if [ -n "$MAX_RSS" ] && [ "$MAX_RSS" -gt "$MEMORY_THRESHOLD_KB" ]; then
        echo "$(date): $PROCESS_NAME max RSS=${MAX_RSS}KB exceeded threshold. Restarting dde-shell..." >> ~/.local/logs/tray_monitor.log
        systemctl --user restart dde-shell@DDE.service
        sleep 60   # 避免频繁重启
    fi
    sleep "$CHECK_INTERVAL"
done
EOF

# 加执行权限
chmod +x ~/.local/bin/monitor_tray.sh

# 创建日志目录
mkdir -p ~/.local/logs

# 创建服务
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/tray-monitor.service << 'EOF'
[Unit]
Description=Monitor trayplugin-load memory usage and restart dde-shell
PartOf=graphical-session.target
After=graphical-session.target

[Service]
Type=simple
ExecStart=/home/sheldon/.local/bin/monitor_tray.sh
Restart=always
RestartSec=5

[Install]
WantedBy=graphical-session.target
EOF

# 启动服务
systemctl --user daemon-reload
systemctl --user enable --now tray-monitor.service

# 检查状态
systemctl --user status tray-monitor.service

2、脚本删除步骤

如果哪天 Deepin 修好了这个 bug,或者你觉得烦了,按下面三步删干净:

# 1. 停止并禁用服务
systemctl --user stop tray-monitor.service
systemctl --user disable tray-monitor.service

# 2. 删除服务文件
rm ~/.config/systemd/user/tray-monitor.service

# 3. 删除监控脚本和日志(可选,不想留就删)
rm ~/.local/bin/monitor_tray.sh
rm -rf ~/.local/logs/tray_monitor.log

# 4. 让 systemd 重新加载一下配置
systemctl --user daemon-reload

3、日志查看

运行起来后,如果发生重启ddeshell会记录日志到~/.local/logs/tray_monitor.log

sheldon@sheldon-PC:~$ tail -f ~/.local/logs/tray_monitor.log
2026年 05月 12日 星期二 14:21:24 CST: trayplugin-load max RSS=525288KB exceeded threshold. Restarting dde-shell...
Reply Favorite View the author
All Replies

No replies yet