JDK 1.7 :«Слишком много открытых файлов» из-за семафоров POSIX?

Я просмотрел другие подобные вопросы на SO, но они, похоже, вызваны другие вопросы.

Сначала я убедился, что благоразумно закрыл все дескрипторы файлов, а затем воспользовалсяlsof -p для просмотра списка файлов.

Он остается довольно постоянным на протяжении всего времени выполнения, но периодически я получаю около 10 000 записей, перечисленных в lsofвот так:

COMMAND   PID USER   FD     TYPE DEVICE  SIZE/OFF     NODE NAME
                                     ...
java    36809  smm *235r  PSXSEM              0t0          kcms00008FC901624000
java    36809  smm *236r  PSXSEM              0t0          kcms00008FC901624000
java    36809  smm *237r  PSXSEM              0t0          kcms00008FC901624000
java    36809  smm *238r  PSXSEM              0t0          kcms00008FC901624000
java    36809  smm *239r  PSXSEM              0t0          kcms00008FC901624000

На справочной странице написано, что PSXSEMтип является семафором POSIX. Любая подсказка, для чего JDK использует семафоры POSIX? Кстати, на данный момент это приложение представляет собой однопоточное приложение командной строки.

Потенциально полезная предыстория :Я впервые заметил это после обновления до JDK 1.7 в Mac OS X 10.7.3:

java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)

Обновление :, переназначающее $JAVA_HOMEна JDK 1.6, кажется обходным решением проблемы.

java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04-415-11M3635)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01-415, mixed mode)

Что JDK 1.7 делает по-другому?

17
задан Community 23 May 2017 в 11:52
поделиться