django+uwsgi+nginx數據表過大引起"out of memory for query result"
阿新 • • 發佈:2019-03-19
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"