1. 程式人生 > >django+uwsgi+nginx數據表過大引起"out of memory for query result"

django+uwsgi+nginx數據表過大引起"out of memory for query result"

mit 文本 timeout 方式 uwsgi 項目 corn cor worker

昨天負責的一個項目突然爆“out of memory for query result”。

背景

項目的數據表是保存超過10m的文本數據,通過json方式保存進postgres中,上傳一個13m的大文件處理過程中出錯。

懷疑

1 .celery進程過多

一開始懷疑celery進程過多導致的內存不足引起,查了一個有46個celery進程,
改為5個worker,狀況沒得到改善。

2.postgres work_mem過小

接著環境postgres的work_mem配置過小,默認是4m,改大後照樣無效果。

3.django進程問題

重新用runserver 運行,上傳大文件,通過,也就是無django無關

4.uwsgi配置

查了google,將limit-as改為2046無效果,改為9999無效果。

嘗試

經過上述實踐,已經找到問題的根源,就是uwsgi進程內存過大後報錯了,所以換gunicorn這個python服務器替換。
用gunicorn替換uwsgi,上傳後出現timeout,看來是默認超時時間過短,改為300s,再上傳大文件,完美通過。



django+uwsgi+nginx數據表過大引起"out of memory for query result"