2009-10-15 4 views
0

Проблема: мой mod_perl протекает, и я не могу его контролировать.Могу ли я измерить память, выполненную mod_perl?

Я запускаю скрипт mod_perl под Ubuntu (производственный код). Обычно существует 8-10 экземпляров сценариев, работающих одновременно.

Согласно Unix «top» utilty каждый экземпляр занимает 55M памяти. 55M много, но мне сказали, что большая часть этого memory is shared.

Память протекает. На сервере есть 512M. В течение 24 часов после перезагрузки происходит значительное уменьшение свободной памяти.

Тест: свободная память в системе в данный момент 10 скриптов работают: -после перезагрузки: 270M -в 24 часов после перезагрузки: 50M

в течение 24 часов памяти, принятой каждый из сценария примерно одинаков - 55M (согласно «верхней» утилите). Я не понимаю, где пропадает память. И не знаю, как я могу найти утечки.

Я делюсь памятью, я предварительно загружаю все модули, необходимые для скрипта в startup.pl.

Еще один тест. Очень простой mod_perl скрипт («Привет, мир!») Занимает 52М (в соответствии с «сверху»)

Согласно «Practical mod_perl» Я могу use GTop utility измерить реальную память, занятую mod_perl. Я сделал очень простой скрипт, который измеряет память с помощью GTop. Это показывает, что реальная память 54M взята очень простым perl-скриптом! 54 мегабайта от «Hello world»? !!!

proc-mem-size: 59,707392 
proc-mem-share: 52,59264 
diff: 54,448128 

Должно быть что-то неправильно в том, как я измеряю память 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 
+0

Ребята, у меня есть шанс получить ответ? – Pavel

ответ

2

Это на самом деле не похоже числом апача/mod_perl процессов в существовании или памяти они используют сильно изменился между двумя сообщениями вы размещаете. Я отмечаю, что вы не опубликовали заголовок для второго отчета. Было бы интересно увидеть «кэшированную» фигуру через 24 часа. Я собираюсь выйти на конечность и догадаться, что именно здесь идет ваша память - Linux использует его для кэширования ввода-вывода файлов. Вы можете думать о кэше ввода-вывода файлов как о фактически свободной памяти, так как Linux сделает эту память доступной, если в ней нуждаются процессы.

Вы также можете проверить, что это то, что происходит при выполнении

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

как корня cause the memory in use by the caches to be released, и подтверждение того, что это приводит к тому, объем свободной памяти, сообщила вернуться к исходным значениям.

+0

Команда drop_caches является amaizing! Спасибо вам большое! Теперь у меня есть лучший контроль над моей системой. Я обновил диагностику «после 24 часов». 114620k (в кеше) + 66796k (бесплатно) = 181416k По сравнению с оригиналом 269300k - разница 90M. – Pavel

Смежные вопросы