Memory leaks 我可以测量mod_perl占用的内存吗?

Memory leaks 我可以测量mod_perl占用的内存吗?,memory-leaks,mod-perl,Memory Leaks,Mod Perl,问题:我的mod_perl漏洞,我无法控制它 我在Ubuntu(生产代码)下运行mod_perl脚本。 通常有8-10个脚本实例同时运行 根据Unix“top”实用程序,每个实例占用55M内存。 55M是很多,但这里有人告诉我大部分是这样的 内存正在泄漏。 服务器上有512M个。 重新启动后24小时内,可用内存显著减少 测试:在运行10个脚本时释放系统内存: -重启后:270M -重启后24小时内:50米 在24小时内,每个脚本占用的内存大致相同-55M(根据“top”实用程序)。 我不明白记忆

问题:我的mod_perl漏洞,我无法控制它

我在Ubuntu(生产代码)下运行mod_perl脚本。 通常有8-10个脚本实例同时运行

根据Unix“top”实用程序,每个实例占用55M内存。 55M是很多,但这里有人告诉我大部分是这样的

内存正在泄漏。 服务器上有512M个。 重新启动后24小时内,可用内存显著减少

测试:在运行10个脚本时释放系统内存: -重启后:270M -重启后24小时内:50米

在24小时内,每个脚本占用的内存大致相同-55M(根据“top”实用程序)。 我不明白记忆是从哪里漏出来的。 我不知道怎么才能找到漏洞

我共享内存,在startup.pl中预加载脚本所需的所有模块

再来一次测试。 一个非常简单的mod_perl脚本(“helloworld!”)需要52M(根据“top”)

根据“实用mod_perl”,我可以测量mod_perl占用的实际内存。 我制作了一个非常简单的脚本,用GTop测量内存。 它显示了一个非常简单的perl脚本占用了54M的实际内存! 54兆字节由“你好,世界”

我测量mod_perl内存的方式一定有问题。 救命啊! 这个问题好几天都让我发疯

这些是重新启动后以及重新启动后24小时内“顶部”输出的快照。 进程按内存排序

---- RIGHT AFTER REBOOT ----

top - 10:25:24 up 55 min,  2 users,  load average: 0.10, 0.07, 0.07
Tasks:  59 total,   3 running,  56 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 97.3%id,  0.7%wa,  0.0%hi,  0.0%si,  2.0%st
Mem:    524456k total,   269300k used,   255156k free,    12024k buffers
Swap:        0k total,        0k used,        0k free,    71276k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2307 www-data  15   0 58500  27m 5144 S  0.0  5.3   0:02.02 apache2
 2301 www-data  15   0 58492  27m 4992 S  0.0  5.3   0:02.09 apache2
 2302 www-data  15   0 57936  26m 4960 R  0.0  5.2   0:01.74 apache2
 2895 www-data  15   0 57812  26m 5048 S  0.0  5.2   0:00.98 apache2
 2903 www-data  15   0 56944  26m 4792 S  0.0  5.1   0:01.12 apache2
 2886 www-data  15   0 56860  26m 4784 S  0.0  5.1   0:01.20 apache2
 2896 www-data  15   0 56520  26m 4804 S  0.0  5.1   0:00.85 apache2
 2911 www-data  15   0 56404  25m 4768 S  0.0  5.1   0:00.87 apache2
 2901 www-data  15   0 56520  25m 4744 S  0.0  5.1   0:00.84 apache2
 2893 www-data  15   0 56608  25m 4740 S  0.0  5.1   0:00.73 apache2
 2277 root      15   0 51504  22m 6332 S  0.0  4.5   0:01.02 apache2
 2056 mysql     18   0 98628  21m 5164 S  0.0  4.2   0:00.64 mysqld
 3162 root      15   0  6356 3660 1276 S  0.0  0.7   0:00.00 vi
 2622 root      15   0  8584 2980 2392 R  0.0  0.6   0:00.07 sshd
 3083 root      15   0  8448 2968 2392 S  0.0  0.6   0:00.06 sshd
 3164 par       15   0  5964 2828 1868 S  0.0  0.5   0:00.05 proftpd
    1 root      18   0  3060 1900  576 S  0.0  0.4   0:00.00 init
 2690 root      17   0  4272 1844 1416 S  0.0  0.4   0:00.00 bash
 3151 root      15   0  4272 1844 1416 S  0.0  0.4   0:00.00 bash
 2177 root      15   0  8772 1640  520 S  0.0  0.3   0:00.00 sendmail-mta
 2220 proftpd   15   0  5276 1448  628 S  0.0  0.3   0:00.00 proftpd
 2701 root      15   0  2420 1120  876 R  0.0  0.2   0:00.09 top
 1966 root      18   0  5396 1084  692 S  0.0  0.2   0:00.00 sshd


---- ROUGHLY IN 24 HOURS AFTER REBOOT

top - 17:45:38 up 23:39,  1 user,  load average: 0.02, 0.09, 0.11
Tasks:  55 total,   2 running,  53 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    524456k total,   457660k used,    66796k free,   127780k buffers
Swap:        0k total,        0k used,        0k free,   114620k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
16248 www-data  15   0 63712  35m 6668 S  0.0  6.8   0:23.79 apache2
19417 www-data  15   0 60396  31m 6472 S  0.0  6.2   0:10.95 apache2
19419 www-data  15   0 60276  31m 6376 S  0.0  6.1   0:11.71 apache2
19321 www-data  15   0 60480  29m 4888 S  0.0  5.8   0:11.51 apache2
21241 www-data  15   0 58632  29m 6260 S  0.0  5.8   0:05.18 apache2
22063 www-data  15   0 57400  28m 6396 S  0.0  5.6   0:02.05 apache2
21240 www-data  15   0 58520  27m 4856 S  0.0  5.5   0:04.60 apache2
21236 www-data  15   0 58244  27m 4868 S  0.0  5.4   0:05.24 apache2
22499 www-data  15   0 56736  26m 4776 S  0.0  5.1   0:00.70 apache2
 2055 mysql     15   0  100m  25m 5656 S  0.0  5.0   0:20.95 mysqld
 2277 root      18   0 51500  22m 6332 S  0.0  4.5   0:01.07 apache2
22686 www-data  15   0 53004  21m 4092 S  0.0  4.3   0:00.21 apache2
22689 root      15   0  8584 2980 2392 R  0.0  0.6   0:00.06 sshd
 2176 root      15   0  8768 1928  736 S  0.0  0.4   0:00.00 sendmail-
+mta
    1 root      18   0  3064 1900  576 S  0.0  0.4   0:00.02 init
22757 root      15   0  4268 1844 1416 S  0.0  0.4   0:00.00 bash
 2220 proftpd   18   0  5276 1448  628 S  0.0  0.3   0:00.00 proftpd
22768 root      15   0  2424 1100  876 R  0.0  0.2   0:00.00 top
 1965 root      15   0  5400 1088  692 S  0.0  0.2   0:00.00 sshd
 2258 root      18   0  3416 1036  820 S  0.0  0.2   0:00.01 cron
 1928 klog      25   0  2248 1008  420 S  0.0  0.2   0:00.04 klogd
 1946 messageb  19   0  2648  804  596 S  0.0  0.2   0:01.63 dbus-daem
+on
 1908 syslog    18   0  2016  716  556 S  0.0  0.1   0:00.17 syslogd

实际上,在您发布的两个报告之间,现有apache/mod_perl进程的数量或它们使用的内存并没有发生很大变化。我注意到你没有发布第二份报告的标题。24小时后看到“缓存”图会很有趣。我将冒一个险,猜测这就是内存的去向——Linux正在使用它来缓存文件I/O。您可以将文件I/O缓存视为基本上可用的内存,因为Linux将在进程需要时提供该内存

您还可以通过执行

sync; echo 3 > /proc/sys/vm/drop_caches

作为root用户,并确认这会导致报告的可用内存量恢复为初始值。

各位,我有机会得到答案吗?drop\u caches命令正在生成!多谢各位!现在我对我的系统有了更好的控制。我已更新“24小时后”顶部诊断。114620k(缓存)+66796k(自由)=181416k与原来的269300k相比相差90米。
sync; echo 3 > /proc/sys/vm/drop_caches