微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python线程使用pm2导致内存泄漏

如何解决Python线程使用pm2导致内存泄漏

出了什么问题?

我做了一些测试,意识到在pm2中使用线程时,它会导致内存泄漏,在此情况下,线程会堆积在线程上而不是转储它们。我已经用pm2和普通终端进行了测试。使用线程时,我可以看到使用普通终端大约需要60mb〜的使用量。使用相同的精确代码,使用PM2时的堆栈可能会超过160MB〜。

要做的是,当线程完成其任务后,应使用return /或sys.exit()将其杀死

我们如何重现此问题?

这是我做过的一个示例,我不确定这是否可以复制它,但是即使相同的代码,相同的代码也应该提供两种不同的RAM使用率。

编辑:

在Windows上测试后。问题仍然存在。我可以看到,使用PM2大约需要11MB,而使用Terminal / cmd大约需要4.5MB。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import random
import threading
import time


class Monitoring(object):

    def parseNew(self):

        ListsNumber = []

        while True:

            newtLists = random.sample(range(1,1000),999)

            for numbers in newtLists:
                if numbers not in ListsNumber:
                    ListsNumber.append(numbers)

                    threading.Thread(
                        target=self.threadingTest,args=(numbers,)
                    ).start()
            else:
                print("sleeping")
                time.sleep(random.randint(2,4))

    def threadingTest(self,numbers):
        print(numbers)
        return


if __name__ == '__main__':
    Monitoring().parseNew()

支持信息

Python 3.8.2,Ubuntu 20.04.1 LTS

--- PM2 report ----------------------------------------------------------------
Date                 : Fri Sep 11 2020 15:45:24 GMT+0200 (Central European Summe                                                                                                                                                             r Time)
===============================================================================
--- Daemon -------------------------------------------------
pm2d version         : 4.4.0
node version         : 14.6.0
node path            : /usr/bin/pm2
argv                 : /usr/bin/node,/usr/lib/node_modules/pm2/lib/Daemon.js
argv0                : node
user                 : testing
uid                  : 1000
gid                  : 1000
uptime               : 50586min
===============================================================================
--- CLI ----------------------------------------------------
local pm2            : 4.4.0
node version         : 14.6.0
node path            : /usr/bin/pm2
argv                 : /usr/bin/node,/usr/bin/pm2,report
argv0                : node
user                 : testing
uid                  : 1000
gid                  : 1000
===============================================================================
--- System info --------------------------------------------
arch                 : x64
platform             : linux
type                 : Linux
cpus                 : Intel(R) Core(TM) i7-8700T cpu @ 2.40GHz
cpus nb              : 12
freemem              : 1734098944
totalmem             : 16617046016
home                 : /home/tester
===============================================================================

一个问题可能是我使用线程的方式,但我不这么认为,因为它使用pm2和cmd会提供两种不同的RAM使用情况

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。