zoukankan      html  css  js  c++  java
  • python debug查看进程和线程挂死问题和内存泄漏

    1、python 调试工具 pyrasite 可以附加到python进程中,在这个进程中打开一个python 命令行。然后再这个里面执行代码。

    (对于这种挂死问题通常是由于多进程和多线程混用导致的,多线程中如果有锁,在使用fork创建多进程的过程中fork出来的进程是单线程执行的,只会复制内存中的对象当前的信息,如果有一把锁被别的线程获取到,我们当前fork出的进程中的这个线程中,这把锁的状态只会是锁定状态,会导致子进程中再使用这个锁的时候会导致死锁。)

    2、对于python进程中的挂死问题,我们需要对于进程中所有的线程查看它们卡死在了哪一个位置。

    当我们进入这个进程中后,我们可以执行下面的代码查看进程的帧栈。

    import sys
    for threadid,stack in sys._current_frame().items():
        print(threadid,stack)

    3、对于内存泄漏问题,我们可以使用objgraph来查看内存泄漏,对于python  代码造成的内存泄漏,我们可以很容易得看出来泄漏对象的引用关系。

    但是对于C代码造成的泄漏,我们通常只能看出对象类型来,并不能看出泄漏对象的引用关系。所以还要一步一步排除。

    4 py-spy 也可以看出进程是否挂死

  • 相关阅读:
    团队展示
    平衡二叉树AVLTree
    红黑树原理
    日本楼市崩盘始末
    池化
    Spring配置多数据源
    关于C语言指针几个容易混淆的概念
    .net core 部署 Docker 所遇到的几个问题
    自定义类加载器也是无法实现加载java.lang.String的
    jquery轻量级数字动画插件jquery.countup.js
  • 原文地址:https://www.cnblogs.com/lycsdhr/p/11831788.html
Copyright © 2011-2022 走看看