Привет всем. Вопрос по использованию памяти при fork.
Есть у меня perl приложение, которое создает дочерние рабочие процессы.
Родительский процесс постоянно дает дочерним задания, дочерние отправляют
ответы в главный. Количество дочерних процессов постоянно.
В дочерних процессах кроме perl кода исполняется C код: парсер html страничек и
Curl (если используется).
Приложение может использовать в качестве HTTP клиента: LWP, Curl,
AnyEvent::HTTP.
Сколько памяти занимает приложение смотрел по количеству свободной памяти перед
завершение дочерних процессов. Эти значение представлены ниже для разного
количество рабочих процессов (0 - это когда без fork, все работа в главном
идет).
LWP Curl AnyEvent::HTTP
FreeBSD Linix FreeBSD Linix FreeBSD Linix
0 15 17 20 17 38 20
1 23 26 35 20 47 25
2 33 38 50 25 62 33
3 43 51 64 30 80 40
4 53 65 76 34 93 47
5 61 78 84 37 109 55
6 67 89 98 42 119 62
7 75 103 105 45 126 69
8 85 116 115 50 146 76
9 93 126 122 52 153 83
10 103 136 130 57 166 91
Удивило сравнение с Linux.
Как можно это объяснить и что можно подкрутить?
P.S. OS обе 32 под KVM. Размер страниц одинаков.
FreeBSD 9.3
Perl v5.18.4
curl 7.39.0, Features: AsynchDNS IPv6 Largefile GSS-API SPNEGO NTLM NTLM_WB SSL
libz
linux 3.16
Perl v5.14.2
curl 7.33.0 Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB
SSL libz TLS-SRP
Грешил на версию perl, но потом и на Linux использовал Perl v5.18.4. Цифры
увеличились, но в целом картина не поменялась:
Linux
Perl v5.14.2 Perl v5.18.4
Curl 6 6 43 46
AE 6 6 63 71
(6 6 - это 6 fork, в каждом из которых по 6 IO)