内存泄漏管理

2023-02-07  本文已影响0人  李霖弢

top

top类似ps指令,但可以进入对话模式,动态显示实时状况

进入top后的指令
显示内容
top - 15:17:11 up 41 days,  5:34,  0 users,  load average: 0.08, 0.11, 0.12

系统时间,系统至今运行时间,当前登录用户数,1、5、15分钟内平均系统负载(即任务队列的平均长度,通常数值不超过机器的总核数,就没问题)

Tasks:  13 total,   1 running,  12 sleeping,   0 stopped,   0 zombie

当前进程,运行中进程,休眠进程,停止进程,僵尸进程

%Cpu(s): 10.0 us,  3.3 sy,  0.0 ni, 86.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

CPU空间占用情况

KiB Mem :  7862312 total,   895436 free,  2730104 used,  4236772 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  4792852 avail Mem

内存占用情况,以及硬盘提供的SWAP交换区占用情况。当内存不够用时开始占用SWAP


自动解决内存泄露

配置 gunicorn
gunicorn --max-requests 1000 --max-requests-jitter 50 ... app.wsgi

gunicorn.conf.py中配置

max_requests = 1000
max_requests_jitter = 50

--max-requests 让每个worker处理一定次数请求后自动重启(默认值为0,不重启)
--max-requests-jitter 用于防止多个worker刚好一起重启

配置 celery
app = Celery("myapp")
app.conf.worker_max_tasks_per_child = 100

或django的settings.py中配置

CELERY_WORKER_MAX_TASKS_PER_CHILD = 100
import psutil

celery_max_mem_kilobytes = (psutil.virtual_memory().total * 0.75) / 1024
app.conf.worker_max_memory_per_child = int(
    celery_max_mem_kilobytes / app.conf.worker_concurrency
)

手动处理内存泄漏

objgraph
pip install objgraph 
import objgraph as graph
graph.count(some_dict) # 统计某个对象的数量
graph.show_growth() # 统计自从上次执行该方法后,各种数据类型的新增数

tracemalloc
上一篇 下一篇

猜你喜欢

热点阅读