У меня есть многопоточный код, который должен сгенерировать набор объектов и записать их в файл. Когда я запускаю его, я иногда получаю сообщение «Слишком много открытых файлов» в Exception. Я проверил код, чтобы убедиться, что все потоки файлов закрыты должным образом. Вот трассировка стека.Слишком много открытых файлов в одной из моих java-подпрограмм
Когда я делаю ulimit -a, разрешенные открытые файлы равны 1024. Мы считаем, что увеличение этого числа не является жизнеспособным вариантом/решением.
[java] java.io.FileNotFoundException: /export/event_1_0.dtd (Too many open files)
[java] at java.io.FileInputStream.open(Native Method)
[java] at java.io.FileInputStream.<init>(FileInputStream.java:106)
[java] at java.io.FileInputStream.<init>(FileInputStream.java:66)
[java] at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
[java] at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
[java] at java.net.URL.openStream(URL.java:1010)
Теперь то, что мы определили до сих пор внимательно глядя на список открытых файлов является то, что VM открывает тот же файл класса несколько раз.
/export/BaseEvent.class 236
/export/EventType1BaseEvent.class 60
/export/EventType2BaseEvent.class 48
/export/EventType2.class 30
/export/EventType1.class 14
Где BaseEvent является участником всех классов, а EventType1 ant EventType2 наследует EventType1BaseEvent и EventType2BaseEvent соответственно. Почему загрузчик классов загружает один и тот же файл класса 200 раз. Кажется, он открывает базовый класс столько раз, сколько он создает любой дочерний экземпляр.
Это нормально? Может ли он быть обработан любым другим способом, кроме увеличения количества открытых файлов?
Мы используем drool, я должен посмотреть, как ClassLoader используется в drools. –
Да, мы просмотрели профайлер, и похоже, что DROOLS использует все новые загрузчики классов для somereason. Поэтому я думаю, что теперь мы погрузимся в то, как мы должны изменить способ использования слюни, чтобы он не запускал так много загрузчиков классов. –