JBoss слишком много ошибок открытия файлов

то, В чем Вы нуждаетесь, является составом не наследование.

class Plane
{
  public Fly() { .. }
  public string GetPilot() {...}
}

Теперь при необходимости в специальном виде Плоскости, такой как та, которая имеет PairOfWings = 2, но иначе делает все, плоскость может.. Вы наследовали плоскость. Этим Вы объявляете, что Ваша деривация выполняет контракт базового класса и может быть заменена, не мигая везде, где базовый класс ожидается. например, LogFlight (Плоскость) продолжил бы работать с экземпляром BiPlane.

Однако, если Вам просто нужно поведение Мухи для нового Bird, Вы хотите создать и не готовы поддерживать полный контракт базового класса, Вы сочиняете вместо этого. В этом случае осуществите рефакторинг поведение методов к повторному использованию в новый Полет типа. Теперь создайте и держите ссылки на этот класс и в Плоскости и в Bird. Вы не наследовались, потому что Bird не поддерживает полный контракт базового класса... (например, он не может обеспечить GetPilot ()).

По той же причине, Вы не можете уменьшить видимость методов базового класса, когда Вы переопределяете.. можно переопределить и обнародовать основной закрытый метод в деривации, но не наоборот. например, В этом примере, если я получаю тип Плоскости "BadPlane" и затем переопределяю и "Скрываю" GetPilot () - делают его частным; клиентский метод LogFlight (Плоскость p) будет работать на большинство Плоскостей, но аварийно завершится для "BadPlane", если реализация LogFlight, окажется, будет нуждаться/называть в GetPilot (). , Так как все деривации базового класса, как ожидают, будут 'substitutable' везде, где параметрический усилитель базового класса ожидается, это должно быть запрещено.

8
задан Brian 15 October 2009 в 13:46
поделиться

2 ответа

Прежде всего, вы хотите определить, какие файлы ) остаются открытыми. Я предполагаю, что на вашем сервере работает Linux, поэтому, как только вы узнаете PID JBoss

ps ax | grep something-that-makes-your-jboss-process-unique

, вы можете сделать

ls -l /proc/jbosspid/fd

, чтобы получить хороший список файлов, открытых в данный момент.

Что вы собираетесь делать next немного зависит от того, что вы здесь видите:

  1. вам может просто понадобиться немного увеличить количество файлов, которые сервер может открыть с помощью ulimit (также посмотрите на общесистемные ограничения на вашем сервере)
  2. возможно вы заметили несколько файлы, которые ваше приложение забыло закрыть
  3. ....
13
ответ дан 5 December 2019 в 07:35
поделиться

Предполагая, что вы работаете в Linux (или другом * NIX), существует ограничение на количество дескрипторов файла 1024 на процесс. В Unix все является файлом, включая сокет, устройство и так далее. Стоит взглянуть на это, запустив команду lsof (только как root) - она ​​покажет вам все дескрипторы открытых файлов.

Чтобы исправить это, отредактируйте файл в / etc / security / limits. conf, добавьте следующие строки и перезапустите jboss.

jboss          soft    nofile          16384
jboss          hard    nofile          16384

(предполагается, что ваш jboss запущен пользователем "jboss")

6
ответ дан 5 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: