私は ubuntu 18 (18.04.5 LTS) で uWSGI を使用しています。ごく最近、これが動作しなくなりました。起動時に次のエラーが表示されるようになりました。
Fatal Python error: Cannot recover from MemoryErrors while normalizing exceptions.
私の側では何も変更されていませんでしたが、サーバーは自動アップグレードに設定されていました。 uwsgi を root として実行すると機能しましたが、www-data (通常はこのように実行します) として実行すると失敗しました。
何度か試行錯誤した結果、--never-swap
オプションが原因であることが判明しました。確かに、それを削除すると再び機能しました。
削除しても問題ありません--never-swap
が、なぜこのようなことが起きたのか知りたいです。新しいセキュリティ機能により、非ルートユーザーがメモリページをロックできないようになっているのでしょうか。ドキュメントには、このオプションはそうする、と書かれています。uWSGIドキュメントはこちら。
答え1
権限のないプロセスでは、メモリ ページをロックするために CAP_IPC_LOCK 機能が必要です。おそらく誰か (あなたまたは別の管理者) がこの機能を手動で設定し、最近の更新がインストールされたときにこの機能は当然なくなっています。