потребление виртуальной памяти pthreads - PullRequest
2 голосов
/ 22 июня 2010

Здравствуйте. Я разработал многопоточное приложение TCP-сервера, которое позволяет 10 одновременным соединениям получать от них непрерывные запросы, после некоторых запросов на обработку, отправлять их клиентам.Я использую его на плате с процессором TI OMAP l137, она работает под управлением Monta Vista Linux.Потоки создаются для каждого клиента, то есть 10 потоков, и это предварительно потоки.его физическая память составляет около% 1,5, а загрузка процессора - около% 2 в зависимости от ps, top и meminfo.Использование виртуальной машины увеличивается до 80M, где у меня 48M (я уменьшил его с u-boot, чтобы зарезервировать кое-что для DSP).Любая помощь приветствуется, как я могу уменьшить ее ??. (/ Proc / sys / vm / .. хитрости не помогают:)

Спасибо.

Ответы [ 3 ]

1 голос
/ 22 июня 2010

Большинство виртуальных машин, вероятно, только для стеков.Конечно, он виртуальный, поэтому он не фиксируется, если вы его не используете.

(мне интересно, имеет ли размер стека по умолчанию поток как-то связанный с ulimit -s)

Очевидно, да, согласно этот другой вопрос SO

1 голос
/ 22 июня 2010

Вы можете попробовать использовать замену сборки мусора для malloc () , и посмотрите, решит ли это вашу проблему.Если это так, найдите утечки и устраните их, а затем избавьтесь от сборщика мусора.

«Интересно» преследовать такие проблемы на платформах, которые не анализируются большинством анализаторов кучи и профилировщиков (например, valgrind).полностью (если вообще) поддержка.

С другой стороны, учитывая ограничения .. Я предполагаю, что вы уменьшили размер стека потока по умолчанию?Я думаю, что по умолчанию 8M, вам, вероятно, не нужно так много.См. pthread_attr_setstacksize () , если вы не настроили его.

Редактировать :

Размер стека по умолчанию можно проверить с помощью pthread_attr_getstacksize() .Если это 8M, вы уже достигли своего потолка во время создания потока (10 потоков, как вы упомянули).

0 голосов
/ 22 июня 2010

Поднимается ли он до этого уровня и остается там?Или это в конечном итоге заканчивается память?Если первое, вам просто нужно найти способ иметь меньший рабочий набор.Если последнее, у вас утечка памяти, и вам нужно это исправить.

...