几天前我遇到了一个奇怪的问题,我不知道该怎么办。我的一些程序界面最近似乎坏了。这很奇怪,因为我没有做过任何重大更新。在我看来(虽然我不是专家),所有的 QT 界面都坏了(例如 VLC、Clementine、Skype)。这真的让我很烦恼,因为我无法使用很多程序。然而,大多数程序和系统本身都运行良好。
界面看起来有些不完整,所有组件的尺寸都不对,文本不显示,用户交互时闪烁。我真的不知道从哪里开始,也不知道是什么原因导致了这样的问题,因为它多年来一直运行良好。
我正在运行 Ubuntu 14.04 LTS。
从命令行运行某些程序时,我收到 gtk-warning Gdk-WARNING **: shmget failed: error 28
。这似乎是由于共享内存段的问题。这对我来说真的很奇怪,因为我使用系统的方式和往常一样。搜索这个错误带来了一些令人困惑的信息。然而,我找不到解决方案或任何对我有帮助的信息。
对于 Skype,我尝试过这里的解决方案和解决方法,但没有成功:如何修复 Skype 的图形问题,Gdk-WARNING?
编辑:
我发现当我重新启动时,应用程序可以正常工作。它们只是在某个时候停止工作……因此,Gdk-WARNING
有关共享内存似乎是问题所在。虽然我似乎无法通过关闭所有正在运行的应用程序来释放任何内存。所以解决方案可能是找到占用共享内存空间的应用程序?
答案1
我也遇到过同样的问题。你说得对,原因是系统中没有可用的共享内存。
要找出谁占用了所有共享内存,你可以运行ipcs -m -p
。在我的例子中,输出如下:
$ ipcs -m -p
------ Shared Memory Creator/Last-op PIDs --------
shmid owner cpid lpid
1277952 weekens 3642 3746
2523137 weekens 4046 4119
1409026 weekens 3696 3343
786435 weekens 3203 1310
1802244 weekens 3887 3919
1900549 weekens 3899 3343
1998854 weekens 3906 3343
2031623 weekens 3872 498
2326536 weekens 3885 17493
2228233 weekens 3885 17493
2261002 weekens 3885 17493
2424843 weekens 3872 498
2555916 weekens 3885 17493
136708109 weekens 3872 498
2719758 weekens 4176 3343
2752527 weekens 4176 3343
2850832 weekens 4573 18066
2949137 weekens 4155 788
2981906 weekens 4155 788
3112979 weekens 4916 4916
3145748 weekens 4916 4916
3178517 weekens 4916 4916
3211286 weekens 4916 4916
3244055 weekens 4916 4916
3276824 weekens 4916 4916
3309593 weekens 4916 4916
3342362 weekens 4916 4916
3375131 weekens 4916 4916
3407900 weekens 4916 4916
3440669 weekens 4916 4916
3473438 weekens 4916 4916
3506207 weekens 4916 4916
3538976 weekens 4916 4916
3571745 weekens 4916 4916
3604514 weekens 4916 4916
3637283 weekens 4916 4916
3670052 weekens 4916 4916
3702821 weekens 4916 4916
3735590 weekens 4916 4916
3768359 weekens 4916 4916
3801128 weekens 4916 4916
3833897 weekens 4916 4916
3866666 weekens 4916 4916
3899435 weekens 4916 4916
3932204 weekens 4916 4916
3964973 weekens 4916 4916
3997742 weekens 4916 4916
4030511 weekens 4916 4916
4063280 weekens 4916 4916
4096049 weekens 4916 4916
4128818 weekens 4916 4916
4161587 weekens 4916 4916
4194356 weekens 4916 4916
4227125 weekens 4916 4916
4259894 weekens 4916 4916
4292663 weekens 4916 4916
4325432 weekens 4916 4916
4358201 weekens 4916 4916
4390970 weekens 4916 4916
.... 4916 PID all the way down
,结果发现 PID 为 4916 的进程占用了所有共享内存(该进程为 IntelliJ IDEA)。kill 完该进程后,问题解决。
答案2
将我的 JDK 从版本 7 更新到版本 8 解决了这个问题。
sudo apt-get install openjdk-8-jdk
如果您使用的是 14.04 或更早版本,则可能需要在安装之前手动添加 PPA(例如sudo add-apt-repository ppa:openjdk-r/ppa
,虽然没有安全保障!)
接下来,通过以下方式选择新版本:
sudo update-alternatives --config java.
您可以通过以下方式检查您的 Java 版本:
java -version
它应该打印类似openjdk version "1.8.0_45-internal"