作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我的应用类似于假设程序:
for(;;) {
for (i=0; i<1000; i++) {
p[i] = malloc(random_number_between_1000_and_100000());
p[i][0]=0; // update
}
for (i=0; i<1000; i++) {
free(p[i]);
}
}
没有内存泄漏,但在我的系统上,内存消耗(顶部,VSS 列)无限制地增长(例如可用物理内存的 300%)。这正常吗?
已更新 - 使用内存一段时间然后释放它。这有区别吗?
最佳答案
行为正常。引用 man 3 malloc
:
错误
默认情况下,Linux 遵循乐观的内存分配策略。这意味着当 malloc() 返回非 NULL 时,不能保证 内存确实可用。这是一个非常糟糕的错误。万一发现系统内存不足,一个或多个进程将被 被臭名昭著的OOM killer 杀死。如果在不太希望突然随机丢失一些东西的情况下使用 Linux 选择的进程,而且内核版本足够新,可以使用如下命令关闭这种过度使用行为:
# echo 2 > /proc/sys/vm/overcommit_memory
另请参阅内核文档目录、文件 vm/overcommit-accounting 和 sysctl/vm.txt。
您需要触摸(读/写)Linux 内核的内存才能实际保留它。
关于linux - 我可以在 Linux 上用完虚拟内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1804026/
我们面临一个用例,我们需要在 S3 上存储用户的 secret 图像。现在 S3 可以通过 HTTP 访问,如果我们授予对对象的读取权限,它们将通过 Web 提供给全世界。我们需要将图像/文件仅限于该
我是一名优秀的程序员,十分优秀!