この記事は何
Python3.8のjanome(形態素解析ライブラリ)使用時に、
Traceback (most recent call last): File "janome_test.py", line 6, in <module> File "/.../python3.8/site-packages/janome/tokenizer.py", line 177, in __init__ File "/.../python3.8/site-packages/janome/sysdic/__init__.py", line 92, in mmap_entries OSError: [Errno 24] Too many open files
といったエラーが出た。 ただ、janomeのTokenizerを同時並列で何個も動かしているわけではなく、はっきりとした原因は不明だった。そのため、開くことのできるファイル数・プロセス数の上限値を上げれば解決できないかということで調査してみる。
本記事は、macOS Big Surで実行した時の記録です。
現在の設定値の確認
参考文献:
launchctl limit
コマンドを実行することで確認できる。
出力例:
$ launchctl limit cpu unlimited unlimited filesize unlimited unlimited data unlimited unlimited stack 8388608 67104768 core 0 unlimited rss unlimited unlimited memlock unlimited unlimited maxproc 4048 4048 maxfiles 256 256
limit.maxfiles.plist と limit.maxproc.plist
How to Change Open Files Limit on OS X and macOS Sierra (10.8 - 10.12) · GitHubを参考にして、設定ファイルを記述する。開くことのできるファイル数の上限を変更するために、/Library/LaunchDaemons/limit.maxfiles.plist
に以下を記述。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>limit.maxfiles</string> <key>ProgramArguments</key> <array> <string>launchctl</string> <string>limit</string> <string>maxfiles</string> <string>200000</string> <string>200000</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceIPC</key> <false/> </dict> </plist>
ファイル保存後、sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
を実行。
プロセス数の上限指定も同様にlimit.maxproc.plist
に設定を記述します、上記リンク先を参考にして下さい。
誤った書き換えをした時の対応
手元にファイルを残していなかったので正確な記述をかけないのですが、小さな値をmaxfilesに指定した際にOSの挙動がかなり不安定になってしまいました。
その際、sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
実行後、立ち上げていたChromeなどのアプリが終了し、アプリやメニューバーのボタンをクリックしても実行されない(?)状態に。
強制終了(メニューバーが反応しなかったため)→セーフモードで起動→ターミナルから上記ファイルを編集→再起動で解決。
正直このような挙動をすると想定できていなかったので、次回から今回のケースに類似する設定変更をする際は慎重に検討したいです。