Хотел еще спросить про размер core-файла, т.к. недавно нарвался на
падение (которое кем-то уже описано в issur #4). Так вот - core-dump
имеет на моей машине размер аж 280 Mb, что уж как-то больно жирно. Я
понимаю, что nxweb вероятно адаптируется к обьему памяти (правда, у
меня стоит 4 GB всего), но нельзя-ли это где-то сконфигурировать. Если
можно, то где? А то немного сложно отлаживаться с такими корами.
--
Вы получили это сообщение, поскольку подписаны на группу nxweb-ru.
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес nxweb-ru+u...@googlegroups.com.
Подробнее о функциях можно узнать на странице https://groups.google.com/groups/opt_out.
On 12 мар, 21:18, Yaroslav <yaro...@gmail.com> wrote:
> Погуглил насчет размера core-файла. Пишут, что он равен размеру памяти,
> занятой приложением (code, stack and heap). Т.е., никак особо не
> конфигурируется. Можно задать лимит, но это означает, что дамп получится
> обрезанным, т.е., нечитаемым. Лично у меня core от nxweb весит обычно
> порядка 6Мб. Но если открыть много соединений, то память, безусловно будет
> расти. Питон, если подключить, тоже увеличит потребление (у меня получается
> ~23Mb), равно как и ImageMagick на крупных картинках.
>
> К доступному объему памяти nxweb никак не адаптируется. Использует ровно
> столько, сколько нужно для обработки поступающих соединений. Наверное
> стоило бы иметь конфигурируемый лимит на максимальное число одновременных
> соединений, но пока руки не дошли.
Да, обрезать дамп нет смысла, и он действительно равен обьему
занимаемой приложением
виртуальной памяти. Но в моем случае, даже при первом запуске, без
единого клиента
этот обьем равен 276 Мб(!). При том, что резидентной памяти занято
1328 килобайт, т.е.
чуть больше 1 Mb. Это значит, что память заказана, но реально не
использована.
Процесс содержит ~ 30 тредов.
Параметры при запуске такие:
NXWEB startup: pid=5408 net_threads=2 pg=4096 short=2 int=4 long=4
size_t=4 evt=32 conn=1092 req=164 td=1064
Хочется понять - так и должно быть, или в моей конфигурации какой-то
баг?
On 13 мар, 12:41, Yaroslav <yaro...@gmail.com> wrote:
> Виртуалка у меня тоже большая. Но, вроде бы, это ни на чем не сказывается.
> И, опять же, вроде бы, не должна влиять на размер core. Размер core по идее
> должен соответствовать размеру RSS.
Вот, выходит что нет. Нашел кое-какую информацию вот тут:
http://stackoverflow.com/questions/11734583/why-core-file-is-more-than-virtual-memory
Действительно, у меня чтоит значение 0x23 по умолчанию. Значит вся
виртуальная память
к которой даже ни разу не доступались, а только заказали - дампуется.
Ради теста написал программу из одного malloc() на 16 Mb. И все верно,
core дамп ровнехонько
16 метров и занял.
Отсюда я делаю вывод, что
либо
1. Где-то в коде nxweb напрямую заказана вся эта память.
либо
2. Какая-то из библиотэк подзаказывает память для своих нужд.
On 13 мар, 16:48, Yaroslav <yaro...@gmail.com> wrote:
> Я наврал насчет того, что у меня core весит 6Мб. Был такой тоже, но он
> образовывался на самом старте при ошибке в коде инициализации. А сейчас
> специально спровоцировал - получилось 1.1Гб. Это сборка с питоном,
> ImageMagick, GNUTLS, zlib.
Ok, я все перепроверил и понял вроде корень проблемы.
Разумеется, malloc() не функция системы, а лишь вызов libc, но даже он
не настолько зверский, чтобы комитить неиспользуемые страницы. Т.е.
если
вызвать после malloc() на тот же обьем еще и memset() то RSS
благополучно
сравняется с VSS. Что в общем-то логично.
Большой же отжор памяти обьясняестся тем, что каждый thread имеет
стек, и
в моем дистрибутиве это 8 Mb. Умножив на 34, как раз получаем 272
мегабайта + мелочевка.
Уменьшив размер стека по умолчанию до мегабайта, я сразу получил 40
мегабайт VSS.
Я наврал насчет того, что у меня core весит 6Мб. Был такой тоже, но он образовывался на самом старте при ошибке в коде инициализации. А сейчас специально спровоцировал - получилось 1.1Гб. Это сборка с питоном, ImageMagick, GNUTLS, zlib.
--
Вы получили это сообщение, поскольку подписаны на группу "nxweb-ru".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес nxweb-ru+u...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
Спасибо за полезную информацию.Некоторое время назад вопрос про потребляемую память всплывал в англоязычной рассылке. Дело действительно в стеках. Когда тредов много, то под каждый отводится свой стек. И вот этот стек даже при равном размере в разных ОС может занимать совершенно разный объем RSS. У меня под Ubuntu RSS на стеки почти не расходуется, а на CentOS в этом плане караул. Я после того расследования сократил до нуля пул изначально стартующих "воркеров". Не всем они нужны, а когда понадобятся, будут созданы динамически.