Анализ утечек ресурсов в сетевых приложениях (обработчики сокетов и т. Д.) - PullRequest
0 голосов
/ 21 февраля 2011

Для утечек памяти доступно много инструментов, таких как valgrind, которые вы можете использовать, чтобы выяснить, откуда происходят утечки.Для утечек OpenGL был glDEBugger, который был очень полезен для такого рода вещей.

Есть ли подобный инструмент для сетевого программирования?В частности, для работы с сокетами и каналами linux.

Возможно, существует инструмент for-posix, который измеряет, сколько ресурсов posix использует программа (сколько сокетов, сколько потоков, сколько мьютексов и т. Д.?)

Кроме того, исправьте меня, если я ошибаюсь, но смогут ли языки более высокого уровня (java, python и т. Д., В отличие от c ++) быть в состоянии позаботиться об управлении этими ресурсами так же, как об управлении своей памятью

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

strace и lsof могут (некоторые) помочь в выявлении утечек.Почти определенно некоторая память выделяется вместе с сокетами, каналами и т. Д., Которые вы могли бы отслеживать с помощью инструментов отладки памяти, особенно если у вас есть пользовательские классы, заключающие в себе распределители ресурсов, и в этом случае может быть целесообразно добавитьгигантский кусок неиспользуемых данных для этих классов, и ищите эти гигантские порции данных в результатах memcheck и т. д.

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

1 голос
/ 21 февраля 2011

Valgrind имеет возможность отслеживать некоторые интересующие вас ресурсы:

  • Память через memcheck

  • Файловые дескрипторы с помощью опции --track-fds=yes memcheck

  • Потоки и блокировки через Helgrind и DRD

Генерируемая информация не всегда детализирована, но может быть весьма полезна.

...