理解overcommit_memory

简介:

Redis在启动的时候会报如下WARNING

WARNING overcommit_memory is set to 0! Background save may failunder low memory condition.
To fix this issue add 'vm.overcommit_memory = 1'to /etc/sysctl.conf and then reboot or run the command 'sysctlvm.overcommit_memory=1' for this to take effect.

Linux这个参数默认是0,因此会报这个WARNING,参数的意思参考:https://www.kernel.org/doc/Documentation/vm/overcommit-accounting,前不久线上JVM出现一个问题就是和这个参数相关:java虚拟机启动失败

java -Xmx20g -version

Error occurred during initialization of VM

Could not reserve enough space for object heap

Could not create the Java virtual machine.

但是给10g的时候就OK

java -Xmx10g -version

java version "1.6.0_37"

Java(TM) SE Runtime Environment (build 1.6.0_37-b06)

Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01, mixed mode)

内存明明是够的,后来发现在这台服务器上overcommit_memory被设置了2

cat /proc/meminfo |grep -i commit
CommitLimit(=memory*overcommit_ratio+swap):49744512 kB
Committed_AS: 33947660 kB

从上面可知只能再分配不到14GB的空间,因此也就解释了上面的这个错误,后改成0解决;


本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1299870,如需转载请自行联系原作者



相关文章
|
21天前
|
监控 数据处理 算法框架/工具
Allocation of 179437568 exceeds 10% of free system memory.
本文讨论了在Python编程中遇到的"Allocation of XXXX exceeds 10% of free system memory"错误,并提供了几种解决方法,包括调整代码逻辑以减少内存分配和更改批量大小。
|
4月前
|
安全 数据处理 C#
深入理解C#中的Span<T>和Memory<T>
【1月更文挑战第8天】本文旨在探讨C#中引入的两个重要类型:Span<T>和Memory<T>。它们为开发者提供了一种高效且安全的方式来处理内存中的数据。文章首先介绍这两个类型的基本概念和用途,接着深入分析它们的工作原理和适用场景,并通过代码示例展示如何在实际应用中使用它们。
ZCMU - 2018: Memory leak
ZCMU - 2018: Memory leak
115 0
fork Cannot allocate memory
本章节分享一下经常会遇到 cannot allocate memory的解决方法
fork Cannot allocate memory
|
监控 应用服务中间件 nginx