在一台 4GB 的 ubuntu 机器上,我运行着 apache 和一些 mpm + mysqld。此外,还有一个 postfix、mongod 和偶尔的一些 imagemagick/convert 进程处于活动状态。
在 99% 的日子里,这都没问题。但是,有时(不是高峰时段,而是凌晨 3 点,尽管备份过程开始晚了几个小时)服务器会耗尽 RAM。然后它会终止进程,不幸的是它会从 apache 和/或 mysqld 开始 :-(
我是否有机会定义哪些进程是“重要的”或高优先级的?例如,我将定义 1) apache 2) mysql 3) postfix 4) convert 5) mongod <- 据我所知,mongod 非常有礼貌,如果需要,它会为其他应用程序释放内存。
顺便说一句,系统不会因为幽灵进程而耗尽内存;我使用了一些更清洁的脚本,确保未使用的内存被回收:-)
谢谢
答案1
这是由内核决定的行为。当内核内存不足时,它会做出不良反应并终止使用最多内存的进程。在桌面上,这有时可能是 xserver,这也是一个不宜首先终止的糟糕选择。如果有足够的交换空间,这种情况就不会发生。
如果您的策略是不使用交换文件来强制操作系统使用 RAM,我建议您改用交换文件,并使用设置swappiness
使操作系统主要使用 RAM。在此处了解如何执行此操作:如何配置 swappiness?
10
是典型的激进值swappiness
。我发现,如果值小于 10,操作系统似乎会优先卸载交换,而不是实际运行程序。换句话说,当我的内存不足时,速度会大大减慢。所以也许可以从 10 开始,或者接近 10,看看它如何很好地利用 RAM。
答案2
好吧,在系统监视器中,您只需右键单击进程并选择更改优先级即可分配优先级。如果您没有运行 GUI,则应使用命令 renice,只需查看手册页。