2015-04-27 4 views
0

У нас есть несколько приложений, служб и библиотек, написанных другими командами и сторонними поставщиками. Нам нужно оптимизировать использование памяти для этих приложений и сервисов. Проблема в том, что у нас мало информации о внутренних приложениях. Конечно, у нас есть исходные коды и права на изменение всего, что мы хотим, но довольно сложно выкопать внутренности неизвестного приложения. Итак, тема состоит в том, чтобы обсудить и поделиться идеями о том, как начать и какие методы и инструменты мы могли бы использовать.Оптимизация использования памяти приложения

У нас есть valgrind и heaptrack, чтобы сообщать о утечке памяти и общих распределениях. Мы планируем использовать некоторый статический анализ кода.

Я предполагаю, что должны быть люди, которые уже что-то сделали. Было бы здорово услышать, что другие использовали для этой цели и что вы смогли добиться.

Любая полезная информация об этом оценивается.

ответ

1

Если ваше приложение не является очень экзотическим случаем службы UDP с низкой задержкой, которая не может переносить увеличенные задержки, вы можете легко отслеживать утечки и субоптимальное распределение памяти с помощью Valgrind.

Начните с Valgrind Memcheck, который поможет вам очистить утечки памяти, а затем продолжить с Valgrind Massif, что поможет вам понять, какие части вашей программы выделяют большую кучу памяти.

В случае, если вы действительно бедный человек отладку низкого приложения задержки передачи сообщений вы можете сделать трюк, переопределяя себя таНос/перераспределить/бесплатно (например, с помощью LD_PRELOAD here) и, например, отбрасывания приложения, когда его размера растет за пределами определенного предела, когда стек вызовов отвечает определенным критериям. Вы даже можете подключить libunwind и кешировать/распечатывать верхние N выделяющих стеков (как и в heapTracker из OpenJDK, это Java, но идея такая же).

+0

Спасибо. На самом деле это был план, но я думал, что могут быть и другие идеи. – incognito

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