0

根据“top”命令的结果,内存使用量增加了很多。但是,根据每个进程的内存使用情况,使用的内存并没有那么多。

top - 19:57:01 up 1 day, 19:24,  6 users,  load average: 0.17, 0.22, 0.57
Tasks: 500 total,   1 running, 499 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  98858004k total, 90524192k used,  8333812k free,  1039700k buffers
Swap: 16777208k total,        0k used, 16777208k free, 72896460k cached

似乎 Linux 会将缓冲区/缓存内存使用情况标记为已使用,但应用程序不会使用它们。在这种情况下,我仍然有可用的日志内存。

但是,内存和交换空间随后被耗尽,这导致服务器出现故障。这可能是某些应用程序的内存泄漏吗?

如果遇到内存泄漏,内存使用量是否会计算到进程中?

free -m
             total       used       free     shared    buffers     cached
Mem:         96541      88445       8095          0       1016      71223
-/+ buffers/cache:      16205      80335
Swap:        16383          0      16383
4

3 回答 3

1

如果遇到内存泄漏,内存使用量是否会计算到进程中?

的,内存泄漏只是不再需要但还没有被释放的数据。free(trash);

但是,内存和交换空间随后被耗尽,这导致服务器出现故障。这可能是某些应用程序的内存泄漏吗?

的,monitor wich 程序使用如此多的 RAM 并使用http://valgrind.org/对其进行调试

于 2012-06-29T09:04:08.267 回答
0

确保/proc/sys/vm/overcommit_memory为 0。如果不是,则很难发现失控的内存消耗进程。

于 2012-06-29T09:08:51.177 回答
0

TL;博士

只要泄漏不在内核中,任何泄漏的内存都应计入应用程序的进程。

Linux 和可用内存

Linux 在缓存方面非常激进,并且倾向于分配大量可用内存来缓存文件系统块和存储缓冲区。它是非常动态的,所以如果应用程序需要,这个空间仍然可供应用程序使用,但与此同时 Linux 会尝试使用它。

换句话说,不要假设使用的内存百分比很高是内存泄漏的症状。对于内核来说,一切照旧。

也可以看看

http://linux.about.com/od/lsa_guide/a/gdelsa44.htm

于 2012-06-29T09:10:21.467 回答