![如何知道apache2服务器的内存泄漏在哪里](https://linux22.com/image/672473/%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93apache2%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%E5%9C%A8%E5%93%AA%E9%87%8C.png)
我有一个 apache2 服务器,最近似乎有内存泄漏。我以前用mod_wsgi
Python 编写服务器 WEB 服务。起初我以为是我的 python 程序泄漏了内存。但是top
执行命令后,我找不到任何泄漏内存的进程。这是我的top
命令。使用了 128 GB 内存。但 apache2 进程仅使用 14.1 GB 内存,我找不到任何其他使用如此大内存的进程。如何找到它?
top - 16:33:01 up 2 days, 22:20, 1 user, load average: 0.07, 0.03, 0.05
Tasks: 1975 total, 1 running, 1974 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: 131987724k total, 131571384k used, 416340k free, 11068k buffers
Swap: 999420k total, 998324k used, 1096k free, 67008k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30188 www-data 20 0 14.1g 31m 0 S 4 0.0 5:41.80 apache2
31972 root 20 0 18844 2820 960 R 1 0.0 0:00.09 top
1 root 20 0 24348 820 56 S 0 0.0 0:02.21 init
2 root 20 0 0 0 0 S 0 0.0 0:00.33 kthreadd
3 root 20 0 0 0 0 S 0 0.0 0:00.67 ksoftirqd/0
4 root 20 0 0 0 0 S 0 0.0 0:34.55 kworker/0:0
5 root 0 -20 0 0 0 S 0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0 0.0 0:00.00 kworker/u96:0
8 root RT 0 0 0 0 S 0 0.0 0:00.58 migration/0
9 root 20 0 0 0 0 S 0 0.0 0:00.00 rcu_bh
10 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/0
11 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/1
12 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/2
13 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/3
14 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/4
15 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/5
16 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/6
17 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/7
18 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/8
19 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/9
20 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/10
21 root 20 0 0 0 0 S 0 0.0 0:00.00 rcuob/11
答案1
不要担心,它只是来自 Linux 的文件缓存,它与 Apache 没有直接联系:
Linux 正在缓存文件,这样您可以直接从内存而不是硬盘访问它们,从而大大提高性能。
在 Debian 6 和 7 上,我的内存始终用于缓存,在 Debian 8 中,他们似乎减少了缓存大小,因此仍然有可用的 RAM。