我正在开发一个运行自定义 Linux 平台的嵌入式系统,Xorg 进程似乎正在泄漏内存。根据 top,Xorg 的虚拟内存会不断增长,直到系统崩溃。根据 /proc/$pid/status,其 VmPeak 将不受控制地增长,但其 VmSize 将保持较小。/proc/$pid/status 的内容如下:
Name: Xorg
State: S (sleeping)
Tgid: 610
Pid: 610
PPid: 605
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 32
Groups: 0
VmPeak: 102628 kB
VmSize: 18020 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 8172 kB
VmRSS: 8172 kB
VmData: 2140 kB
VmStk: 136 kB
VmExe: 1808 kB
VmLib: 10064 kB
VmPTE: 116 kB
VmSwap: 0 kB
Threads: 1
SigQ: 1/16047
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000301000
SigCgt: 00000001d18066cf
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: ffffffffffffffff
CapBnd: ffffffffffffffff
Cpus_allowed: 3
Cpus_allowed_list: 0-1
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 2839
nonvoluntary_ctxt_switches: 109
我的理论是 gtkextra(特别是 gtkplot)没有正确清理其像素图缓冲区,因为泄漏仅当使用 gtkplot 创建的对象呈现到屏幕上时才会发生。我到处寻找一些关于不兼容的文档或其他人遇到此错误的文档,但一无所获,我希望 xorg.conf 中有一些我可以切换的标志来修复此问题,但我并不完全抱有希望。我使用的 xorg/xserver 版本是 1.11.2,gtkextra 版本是 3.0.1。我的问题是:是否有一些已知的配置值可以在 xorg.conf 中更改以防止出现此问题,或者我的版本不兼容?很少有人为这个错误而苦苦挣扎,这让我怀疑我犯了一些配置错误。