めも

メモ.

Macで利用可能なプロセス数と開くファイル数の制限を変更する

この記事は何

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などのアプリが終了し、アプリやメニューバーのボタンをクリックしても実行されない(?)状態に。

強制終了(メニューバーが反応しなかったため)→セーフモードで起動→ターミナルから上記ファイルを編集→再起動で解決。

正直このような挙動をすると想定できていなかったので、次回から今回のケースに類似する設定変更をする際は慎重に検討したいです。

プライバシーポリシー

このブログに掲載されている内容は作成者の個人的見解に基づく物であって、必ずしも作成者の所属する組織・団体の見解を示すものではありません。また、記載が不正確であったことにより生じたいかなる損害に関しても、責任を負いかねますのでご了承ください。また、本サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。また、本サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー(Cookie)を使用しております。 クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。本サイトの管理者への問い合わせ、当ブログのプライバシーポリシーの詳細についてはこちらをご覧ください。