2009年3月6日星期五

Debian Unstable 中 xscreensaver-demo 启动速度慢的问题

Debian unstable 中,启动 xscreenaver-demo 程序过程中间有一段时间窗口会失去响应,大概有 3 秒左右,让人很是苦恼。

首先想到的方法是用 strace 跟踪,找找看是哪个系统调用引起的。经 strace 发现是在启动一个子进程(fork)之后等待子进程结束。最开始想通过分析源代码找到问题出现的位置,找了一会儿之后发现其实想从源代码中找到具体位置还是挺困难的。

经过一段时间的摸索之后,突然来了一个灵感,通过 ps 查看等待过程之中和之后的进程列表。一试,果然有效!发现 xscreensaver-demo 是在等待 dcop 这个进程的返回。看来问题肯定跟这个 dcop 有关!手工启动 dcop,发现 dcop 在等待某些响应,一直没有等到,然后超时了。由于 xscreensaver-demo 是同步调用的 dcop,所以就导致了 xscreensaver-demo 失去响应。dcop 在等待什么呢,很有可能是在等待 kde 的基础组件中的某个程序的响应。由于我一般都不用 KDE,所以也不启动 kdeinit 程序,这应该就是最终的原因了。

找到原因之后,在系统启动脚本中加入了 kdeinit 的调用,xscreensaver-demo 再也不假死了。

没有评论: