Я не могу решить java.io.FileNotFoundException (слишком много открытых файлов в системе)

Отказ от ответственности. Во-первых, я не SU. Я компьютерный пользователь среднего уровня с небольшим опытом. Я могу написать базовый код, использую компьютеры более 20 лет. MSDOS, для Windows на протяжении многих лет я на OS X. Я искал все выше и ниже в течение нескольких недель и поэтому решил обратиться к большому оружию с просьбой о помощи. Я надеюсь, что вы в порядке с этим.

Во первых я на OS X 10.11.6,

У меня возникла проблема с моим программным обеспечением для резервного копирования Crashplan, и я работал с ним вместе с сотрудниками службы поддержки. Все сводилось к ошибке:

java.io.FileNotFoundException (Too many open files in system)

Я прочитал и обнаружил, что мне нужно увеличить количество открытых файлов, разрешенных в моей системе. Я сделал это, создав и изменив значения файлов, расположенных в /Library/LaunchDaemons,

Я создал два файла:limit.maxfiles.plist а также limit.maxproc.plist

В 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>54000</string>
      <string>54000</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>  

и внутри limit.maxproc.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.maxproc</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxproc</string>
          <string>4096</string>
          <string>4096</string>
        </array>
      <key>RunAtLoad</key>
        <true />
      <key>ServiceIPC</key>
        <false />
    </dict>
  </plist>

Я перезапустил и проверил это вступило в силу, запустив launchctl limit maxfiles на терминале. Это показало, что это было в действительности.

Я снова запустил аварийный план, и он выдал ту же ошибку. Я проверил с крашпланом людей, и они в основном сказали жестко, вот в чем проблема, иди исправляй это (я думаю, это достаточно справедливо).

Таким образом, я продолжал увеличивать количество файлов, разрешенных для открытия, пока я не достигал 900000000). Да, в общей сложности разрешено открыть 900 миллионов файлов. Больше, чем у меня на моем общем диске. Ошибка все еще сохраняется. Проверка с launchctl limit maxfiles это показывает, что оно действует.

Итак, это оставило меня в тупике. Затем я оглянулся и обнаружил, что могу запустить команду ulimit -S -n 900000 что даст какой-то другой части системы больше файлов для воспроизведения. Я не уверен, как это работает, но я проверил это ulimit -a и это было в действительности. Та же проблема с Crashplan, хотя.

Так что теперь я не уверен, что делать, поэтому я пришел спросить людей, которые знают ОС лучше, чем большинство. Может кто-нибудь предложить какое-то руководство относительно того, что я могу попытаться решить эту проблему?

Спасибо.

1 ответ

Может быть, это действительно отвечает на вопрос для вас. Вставьте следующее в окно терминала:

while true; do
    sudo lsof |
       awk '{ files[$1]++ } END { for (key in files) { print key, files[key] } }' |
       sort -n -k 2 | tail -10 
    sleep 60;
done

Что это собирается сделать:

  • пока истина - пока вы не прервете это, например, Control-C
  • lsof - выводит список всех открытых файлов в системе и имя процесса (команды), в котором эти файлы открыты
  • awk - подсчитывает количество открытых файлов по процессам
  • sort - сортировка списка по количеству открытых файлов
  • tail - сообщает о 10 процессах с наибольшим количеством открытых файлов
  • спать - подожди минутку и сделай все заново

Вы должны либо сразу увидеть виновника, либо он начнет двигаться к концу списка слишком скоро.

Другие вопросы по тегам