我同时处理许多开放的应用程序(例如PhpStorm、Android、Chrome、Firefox、FileZilla、Evince、SublimeText)。
越来越多的情况发生在硬件的极限上:工作导致灯亮,我觉得硬件在工作,系统变得如此缓慢,直到几分钟后,在一些程序崩溃后,我才能移动鼠标或做任何事情。有时我不得不等待,希望通过做一些killall来打开航站楼。
有没有办法为操作系统预留一定数量的内存以防止其冻结?我需要一个快速响应的操作系统,即使其他应用程序变得有点慢。
我使用的是Ubuntu,它有一个SSD驱动器,主目录中有大约5GB的空闲空间。
free -m:
total used free shared buff/cache available
Mem: 7,8G 4,4G 1,6G 204M 1,8G 2,9G
Swap: 2,0G 1,7G 344M编辑:
我手动为交换设置了2GBRAM,因为它需要使composer update在PHPStorm中为Symfony项目工作。
谢谢
发布于 2021-02-20 21:31:03
最简单的答案是:减少交换空间(参见如何在另一个问题中使用)。
解释:
当RAM满时,内核开始更频繁地使用交换空间(在速度要慢得多的磁盘驱动器上),而应用程序需要等待更长的时间来访问它们的内存,从而降低了这些应用程序的性能。糟糕的性能将继续下去,直到交换空间被填满,内核开始杀死应用程序(内存错误,又名)。OOM)。因此,交换空间越大,应用程序执行的时间就越长。通过减少交换大小,您将减少内核杀死应用程序所需的时间,从而释放一些内存。
不幸的是,桌面环境(负责显示鼠标光标和窗口)与浏览器一样被视为“应用程序”。因此,内核不能将桌面环境从其他应用程序中分离出来,并决定“不应该交换桌面环境内存”,并使其比其他应用程序更具响应性。
其他答复包括:
cgroup中,并限制它们对内存的使用。这个超级用户的答案详细解释了情况和可能的解决方案。
发布于 2021-02-21 09:17:38
你击中了臭名昭著的“内存不足”(OOM)错误。这件事已经过去了16年多了,直到2019年中期,这个问题才引起人们的注意.之后没有任何可靠的修复。这是因为Linux有缓存东西的坏习惯,过多地提交RAM,无法判断您真正拥有多少不可收回的缓存/缓冲区。
但是,有一种简单的方法可以很好地防止您碰到OOM错误:诺航。
你会发现为什么你要点击OOM,但也有一个ppa下的链接,以安装它。这不能修复错误,但这是我们现在对付的最好的事情。
也请考虑使用较少的RAM占用桌面环境,因为每一个软件的启动与重型将使用更多的RAM。此外,Gnome 3,尽管能够做的比配偶(一个GTK 3基础Gnome 2的复兴),是最大的肉桂,然后是KDE和配偶。
我建议XFCE只消耗大约600 of的RAM,而不是超过1.3GB的KDE (7年前的老Gnome 3已经吃了这么多,现在应该更多了)。
浏览器也是如此,任何基于Chrome/Chromium的东西都很常见(除了.(窗口的边缘)。尽量避免使用基于电子或JavaScript的“应用程序”,因为它们消耗太多的RAM来实现自己的功能(例如,一个功能齐全的文本编辑器不应该使用超过30‘t的RAM等等)。
duthils说的是好的(ZRAM和CGroups),但是有时购买更多的RAM来迎合那些不想优化他们的软件的坏开发人员并不是一个合适的解决方法。
另外,考虑一下浏览器的标签悬挂,比如Firefox的“自动标签丢弃”扩展和Vivaldi,这是一个基于Chromium的非常强大的浏览器,如果你真的需要这种基于Chromium的浏览器,它本身就有手动选项卡丢弃。
由于您是一个开发人员:记住,未使用的RAM不是浪费RAM (反向错误的假设几乎总是由.网络开发人员)。
尤其是当缓存的RAM大多不是真正的可收回RAM时,这正是您遇到OOM问题的原因。您可以通过查看top's在echo 3 > /proc/sys/vm/drop_caches之后的“可用”内存来检查这一点,以查看仍然存在一些缓存,通常是很多缓存留下的。
发布于 2021-02-21 17:10:18
我会考虑调整系统的交换性和缓存压力。
您可以通过运行sysctl vm.swappiness=X来调整替换性,其中X在0到100之间。该设置将在开始使用可用RAM交换区的百分比时进行更改。在交换值为0的情况下,系统将在内存耗尽之前不进行交换,而设置100意味着它将在任何时候进行交换。这个描述过于简单化了,但它是基本的。通常我用的是10。
您还可以调整cache_pressure,它确定系统缓存inode和dentry (文件系统)数据的频率。这通常是性能密集型的,值得缓存。0到100表示系统将选择缓存多少。
希望这能帮到杰森。
https://unix.stackexchange.com/questions/635372
复制相似问题