- vm.overcommit_memory
在 Linux 中,可以通过内核参数vm.overcommit_memory去控制是否允许 overcommit:
- 默认值是 0,在这种情况下,只允许轻微的 overcommit,而比较明显的 overcommit 将不被允许。
- 如果设置为 1,表示总是允许 overcommit。
- 如果设置为 2,则表示总是禁止 overcommit。
也就是说,如果某个申请内存的操作将导致 overcommit,那么这个操作将不会得逞。
- vm.swppiness
通常来说操作系统都会开启交换空间,那么交换空间有什么作用呢?
- 允许系统将一些长期没有用到的物理页面换出到交换空间,这样就能节省物理内存的使用。
- 当物理内存不够使用时,系统可以利用交换空间作为缓冲,防止一些进程因为内存不够而被 OOM Killer 杀死。
vm.swppiness可以用来配置交换空间,取值范围是 [0, 100],在 Linux 3.5 之后,它有这些作用:
- 设置为 0 表示禁止交换空间的使用,只有当系统 OOM 时才允许使用交换空间。
- 设置为 1 不会禁止交换空间的使用,但系统会尽量不去使用交换空间。
- 设置为 100 表示系统会很喜欢使用交换空间。
交换空间是位于磁盘之上的,对操作系统来说,访问磁盘的速度远远慢于访问物理内存。所以我们希望,当物理内存足够使用时,系统能尽量不去使用交换空间,这样能降低页面换入换出的频率,因为频繁的页面换入换出操作会严重影响系统的性能。为了达到这种效果,我们可以把vm.swappiness设置为1
echo 1 > /proc/sys/vm/swappiness