繁体   English   中英

如何更好地诊断哪个客户端导致高Xorg CPU使用率?

[英]How to better diagnose which client is causing high Xorg CPU usage?

我遇到问题, Xorg服务器突然变得非常慢,CPU使用率达到100% 谷歌搜索这个问题表明这个问题的“现状”调试方法是开始随机杀死X客户端,直到问题消失,然后你知道哪个客户端是有问题的(运气好后试图调试该进程) 。 没有X客户端占用大量CPU(每个CPU大约占CPU的1%)。 系统仍然有2GB的可用内存。

有人知道更好地诊断问题的方法吗? 基本上我正在寻找Xorg的top替代品,这将直接指向我导致Xorg大部分CPU使用的客户端进程。 我已经知道xrestop与Xorg内存使用情况相同,但这个问题具体是关于CPU的使用情况。

造成这种放缓的另一个原因可能是GPU内存耗尽,这可能导致在PCI-express总线上推送位图,而不是直接从GPU内存渲染显示。 如果这显示为内核级别的CPU使用率(例如top ),则可能是我看到的问题,但我想更好地理解原因。 当我从有问题的系统写这个时,似乎大多数减速发生在输入处理或字体渲染中,但我不知道如何更好地诊断事物。

我知道可以使用另一台计算机并连接ssh ,将gdb进程连接到有问题的Xorg服务器并开始挖掘,但我希望更容易一些东西。

如果我为有问题的客户端获得PID或甚至窗口句柄,找出根本原因会更容易(例如https://unix.stackexchange.com/q/5478 )。 而且我不需要将表现良好的过程视为副作用。

这是一个脚本,可以确定其中一个客户端是否导致了问题(但是对我的问题没有帮助):

#!/bin/bash

WINDOW_IDS=$(xwininfo -tree -root | grep -o -P '\b0x[0-9a-f]+' | sort -u)

PIDS=""
for ID in $WINDOW_IDS
do
    if [ "$ID" = "0x0" ]
    then
        continue
    fi
    #printf "Window %s PID=" "$ID" 
    PID=$(LC_ALL=C xprop -id "$ID" _NET_WM_PID | cut -d' ' -f3-)
    if [ "$PID" = "not found." ]
    then
    #   printf "%s\n" "(unknown)"
    #   See also: https://unix.stackexchange.com/a/84981
        true
    else
    #   printf "%s\n" "$PID"
        PIDS="$PIDS $PID"
    fi
done

PIDS=$(printf "%s\n" $PIDS | sort -u)

# go through the list of processes connected to Xorg:

for PID in $PIDS
do
    printf "%s: %s\n" "$PID" "$(cat /proc/$PID/cmdline)"
    sleep 0.1s # wait for the previous line to get on the screen before stopping e.g. compositing manager 
    # Stop the process for 5 secs and let the process continue after that.
    kill -STOP "$PID" && sleep 1s && kill -CONT "$PID"
done

我们的想法是依次停止每个客户5秒钟,如果能解决问题5秒,你就会发现问题所在。 此脚本将SIGSTOP发送到目标进程,该进程不能被忽略,并阻止目标进程获得CPU时间,因此它也不能向Xorg发送任何事件。 请注意,如果您在中间删除此脚本,则最终可能会使其中一个进程处于STOPPED状态。 发送SIGCONT来解决问题。 如果你等待脚本完成,一切都应该没问题。 (另见: https//unix.stackexchange.com/a/298650

对于我的情况,无论哪个客户端被停止,Xorg都会变慢,所以我猜我遇到的问题是内部Xorg问题,我需要使用FlameGraphs( http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html )找出问题的真正原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM