【问题标题】:Analysing resource leaks in network applications (socket handlers etc)分析网络应用程序(套接字处理程序等)中的资源泄漏
【发布时间】:2011-02-21 16:28:03
【问题描述】:

对于内存泄漏,有许多可用的工具,例如 valgrind,您可以使用它们来找出泄漏的来源。对于 OpenGL 泄漏,有 glDEBugger,它对这类东西非常有用。

有没有类似的网络编程工具?特别是在使用 linux 套接字和管道时。

也许有一个 for-posix 工具可以测量程序正在使用多少 posix 资源(多少套接字、多少线程、多少互斥锁等?)

另外,如果我错了,请纠正我,但高级语言(java、python 等,而不是 c++)是否能够像处理内存管理一样处理这些资源管理?

【问题讨论】:

    标签: linux networking memory-leaks


    【解决方案1】:

    Valgrind 可以跟踪您感兴趣的一些资源:

    • 内存来自memcheck

    • 通过--track-fds=yes memcheck 选项的文件描述符

    • 通过HelgrindDRD 的线程和锁

    生成的信息并不总是很详细,但很有帮助。

    【讨论】:

      【解决方案2】:

      strace 和 lsof 可以(一些)帮助识别泄漏。几乎肯定有一些内存与套接字、管道等一起分配,您可以使用内存调试工具进行跟踪,特别是如果您有包装资源分配器的自定义类,在这种情况下添加一个可能是实际的大量未使用的数据到这些类,并在 memcheck 等的结果中查找那些巨大的数据块。

      高级语言可能会也可能不会管理这些资源。例如,如果您使用高级语言访问相同的低级函数,那么很可能资源没有被管理。但是如果资源被包装在可以被垃圾回收的类中,那么是的,我认为垃圾回收也可以处理资源。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 1970-01-01
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        相关资源
        最近更新 更多