前提・実現したいこと
Flask+uWSGI+NGINXでアプリを動かしたい。
外部からjsonを送り、jsonで返す仕組みにしたい。
タイムアウトの際にタイムアウトのメッセージを表示するためにtimeout()を使用している。
発生している問題・エラーメッセージ
uWSGI process 26132 got Segmentation Fault !! *** backtrace of 19621 *** uwsgi(uwsgi_backtrace+0x2e) [0x5f4c0e] uwsgi(uwsgi_segfault+0x21) [0x5f4fa1] /lib64/libc.so.6(+0x36400) [0x7f9112482400] /usr/lib64/libtcmalloc_minimal.so.4(__libc_malloc+0x4a) [0x7f911359968a] uwsgi(PyObject_Malloc+0x15f) [0x50d10f] uwsgi(PyBytes_FromStringAndSize+0x40) [0x4dd7f0] uwsgi() [0x55ae76] uwsgi() [0x4e20ec] uwsgi(_PyObject_CallFunction_SizeT+0x99) [0x4e3099] uwsgi(PyUnicodeDecodeError_Create+0x2d) [0x6268ed] uwsgi() [0x63507c] uwsgi(PyUnicode_DecodeUTF32Stateful+0x383) [0x4716b5] uwsgi() [0x658127] uwsgi(_PyMethodDef_RawFastCallKeywords+0xed) [0x4e0a7d] uwsgi(_PyCFunction_FastCallKeywords+0x21) [0x4e0971] uwsgi(_PyEval_EvalFrameDefault+0x4f97) [0x53dfe7] uwsgi(_PyEval_EvalCodeWithName+0x2d2) [0x538482] uwsgi(_PyFunction_FastCallDict+0x1cf) [0x4e247f] uwsgi() [0x63b750] uwsgi() [0x45e53a] uwsgi(PyUnicode_FromEncodedObject+0x56) [0x6348e6] uwsgi() [0x4df145] uwsgi(_PyMethodDef_RawFastCallKeywords+0x214) [0x4e0ba4] uwsgi(_PyMethodDescr_FastCallKeywords+0x4f) [0x58fbdf] uwsgi(_PyEval_EvalFrameDefault+0x4d5a) [0x53ddaa] uwsgi(_PyEval_EvalCodeWithName+0x5ba) [0x53876a] uwsgi(_PyFunction_FastCallKeywords+0x220) [0x4e1d50] uwsgi(_PyEval_EvalFrameDefault+0x4c03) [0x53dc53] uwsgi(_PyFunction_FastCallKeywords+0xfb) [0x4e1c2b] uwsgi(_PyEval_EvalFrameDefault+0x4c03) [0x53dc53] uwsgi(_PyFunction_FastCallDict+0x10b) [0x4e23bb] uwsgi(_PyEval_EvalFrameDefault+0x1d00) [0x53ad50] uwsgi(_PyEval_EvalCodeWithName+0x2d2) [0x538482] uwsgi(_PyFunction_FastCallDict+0x1cf) [0x4e247f] uwsgi(_PyEval_EvalFrameDefault+0x1d00) [0x53ad50] uwsgi(_PyFunction_FastCallKeywords+0xfb) [0x4e1c2b] uwsgi(_PyEval_EvalFrameDefault+0x685) [0x5396d5] uwsgi(_PyFunction_FastCallKeywords+0xfb) [0x4e1c2b] uwsgi(_PyEval_EvalFrameDefault+0x685) [0x5396d5] uwsgi(_PyFunction_FastCallKeywords+0xfb) [0x4e1c2b] uwsgi(_PyEval_EvalFrameDefault+0x685) [0x5396d5] uwsgi(_PyFunction_FastCallDict+0x10b) [0x4e23bb] uwsgi(_PyObject_Call_Prepend+0x63) [0x4e28d3] uwsgi() [0x51d6da] uwsgi() [0x51a6c4] uwsgi(_PyObject_FastCallKeywords+0x98) [0x4e15a8] uwsgi(_PyEval_EvalFrameDefault+0x4b66) [0x53dbb6] uwsgi(_PyFunction_FastCallKeywords+0xfb) [0x4e1c2b] uwsgi(_PyEval_EvalFrameDefault+0x4c03) [0x53dc53] uwsgi(_PyFunction_FastCallKeywords+0xfb) [0x4e1c2b] uwsgi(_PyEval_EvalFrameDefault+0x685) [0x5396d5] uwsgi(_PyFunction_FastCallKeywords+0xfb) [0x4e1c2b] uwsgi(_PyEval_EvalFrameDefault+0x685) [0x5396d5] uwsgi(_PyEval_EvalCodeWithName+0x2d2) [0x538482] uwsgi(_PyFunction_FastCallDict+0x3c0) [0x4e2670] uwsgi(_PyObject_Call_Prepend+0x63) [0x4e28d3] uwsgi() [0x51d6da] uwsgi() [0x51a6c4] uwsgi(_PyObject_FastCallKeywords+0x180) [0x4e1690] uwsgi(_PyEval_EvalFrameDefault+0x596e) [0x53e9be] uwsgi(_PyEval_EvalCodeWithName+0x2d2) [0x538482] uwsgi(_PyFunction_FastCallKeywords+0x259) [0x4e1d89] uwsgi(_PyEval_EvalFrameDefault+0x14cb) [0x53a51b] uwsgi(_PyFunction_FastCallDict+0x10b) [0x4e23bb] *** end of backtrace ***
追記:
workerがkillされていないためプロセスが残り続けてエラーを起こしているように感じる。
一度使用したworkerが常に残り続けてるのかもしれない。
該当のソースコード
マルチプロセスのタイムアウト処理を入れ、free():invalid pointerを直すために、libtcmalloc_minimal.so.4を設定した結果出るようになった。
def timeout(): try: print('timeout() start ...') with Pool(processes=1) as p: apply_result = p.apply_async(main, (,)) apply_result.get(timeout=1) print('timeout() finished ...') except TimeoutError: print('main() time out ...') return jsonify(apply_result)
参照URL:https://webbibouroku.com/Blog/Article/python-timeout
試したこと
uWSGIのプロセスをリロードを行うコマンドを設定ファイルに入れたが、設定ファイルで指定しているプロセス数が20であるため、連続で通信を行うと止まってしまった。
process=10,max-requests=1にして行うと、3回目以降からworkerがkillされrespawnした。
max-requests=2にすると、10回動いた後に11回目で上記のエラーが出て、その後workerがkillされrespawnした。
補足情報(FW/ツールのバージョンなど)
OS:CentOS7
python 3.7.6
uWSGI 2.0.19.1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/10 23:27
2021/06/10 23:30
2021/06/10 23:37
2021/06/10 23:47 編集
2021/06/10 23:50
2021/06/11 10:02
2021/06/14 02:54 編集
2021/06/14 03:32
2021/06/14 04:04