Слишком много открытых файлов при выполнении гатлинга на Mac

При выполнении гатлинга (инструментов нагрузочного тестирования) из оболочки на Mac iOS (El Capitan) на моем Macbook Pro 15 '(16 ГБ ОЗУ, 4 физических ядра) у меня возникает ошибка «Слишком много открытых файлов».

Я трачу дни, чтобы решить эту проблему, но безуспешно:

  • Я создал файл в /Library/LaunchDaemons/limit.maxfiles.plist с содержимым файла XML, скопированным из Интернета, безрезультатно.

  • sudo ulimit -n 15000 не работает.

  • Я создал файл /etc/sysctl.conf со следующим содержимым

kern.maxfiles=20480
kern.maxfilesperproc=20480

  • Я пробовал команду «sudo launchctl limit maxfiles 20480 20480» безрезультатно.

Я думаю, что файл xml в «/Library/LaunchDaemons/», кажется, имеет некоторый эффект, потому что, когда я изменяю значение maxfiles, команда «sudo launchctl limit» отображает для меня значение, которое я ввел в файл XML, и когда вызывая "ulimit -n" с некоторым значением, он принимает все значения меньше этого значения, но когда я вызываю "ulimit -n", результат всегда один и тот же "4096".

Я видел, что в Java ограничение составляет 10240, поэтому я попробовал параметр VM (-XX:-MaxFDLimit) без какого-либо эффекта.

Как ни странно, когда я запускал Gatling из Intellij (IDE), я мог получить до 10 200 сокетов. То же самое, дают разные эффекты, даже после выполнения всех команд во всех комбинациях (ulimit, sysctl, launchctl, ...).

С наилучшими пожеланиями


person bsh    schedule 20.11.2015    source источник
comment
и попробовал именно то, что говорит doccu на gatling.io/docs/2.0. 0-RC2/general/operations.html ? например вместо 20к установить 300к на керм.*?   -  person jm666    schedule 21.11.2015
comment
Спасибо за ваш ответ. Я нашел ответ на свой вопрос. Моя проблема с гатлингом связана с тем, что я не могу выполнить ulimit с моим пользователем (отказано в доступе), а sudo ulimit не влияет на текущую оболочку для моего пользователя. Итак, мое решение состоит в том, чтобы выполнить мой стресс-тест Гатлинга под пользователем root (sudo -s), почему я не могу выполнить ulimit без sudo? Проблема остается при выполнении java-программы из Intellij (ограничение 10 240). Я понимаю, что нет смысла выполнять такую ​​программу в Intellij, просто любопытство :)   -  person bsh    schedule 21.11.2015
comment
Для intellij ответ заключается в изменении vmoptions intellij в файле Info.plist, чтобы добавить в ключ VMOptions в конце файла -XX:-MaxFDLimit. изменение файла idea.vmoptions не дает никакого эффекта. Для ulimit ответ состоит в том, чтобы добавить ulimit -n 23000 в мой файл /etc/profile.   -  person bsh    schedule 21.11.2015


Ответы (2)


На всякий случай, если кто-то еще попадет сюда из Google, вот шаги, необходимые для изменения ограничения на количество открытых файлов в последних версиях OS X:

1. В /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>64000</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist> 

2. Измените владельца нового файла:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. Проверьте текущие настройки launchctl limit maxfiles

4. Загрузите эти новые настройки:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

5. Наконец, проверьте правильность ограничений:

launchctl limit maxfiles
person ninjaPixel    schedule 24.01.2017
comment
Очень полезный ответ! - person Konstantin; 07.12.2018
comment
Эта конфигурация limit.maxfiles.plist не работает для меня в Mac OS 10.15/Java 1.8... Кто-нибудь еще столкнулся с этой проблемой? - person Felix GV; 23.02.2021

Я нашел ответ на свой вопрос.

Ulimit и Shell

Моя проблема с гатлингом связана с тем, что я не могу выполнить ulimit с моим пользователем (отказано в доступе), а sudo ulimit не влияет на текущую оболочку для моего пользователя. Итак, мое решение состоит в том, чтобы

Выполните мой стресс-тест Гатлинга под пользователем root (sudo -s). Добавьте строку ulimit -n 23000 в файл /etc/profile.

Интеллект

Для intellij ответ заключается в изменении vmoptions intellij в файле Info.plist, чтобы добавить в ключ VMOptions в конце файла -XX:-MaxFDLimit.

Изменение файла bin/idea.vmoptions не дает никакого эффекта.

Глобальное значение maxfiles следует изменить, добавив файл limit.maxfiles.plist в каталог /Library/LaunchDaemons.

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

Спасибо

person bsh    schedule 21.11.2015
comment
Эта конфигурация limit.maxfiles.plist не работает для меня в Mac OS 10.15/Java 1.8... Кто-нибудь еще столкнулся с этой проблемой? - person Felix GV; 23.02.2021