Очевидная случайность повреждения памяти очень походит на проблему синхронизации потока - ошибка воспроизводится в зависимости от скорости машины. Если объекты (блоки памяти) являются общими для потоками и синхронизацией (критический раздел, взаимное исключение, семафор, другой), примитивы не находятся на на класс (на объект, на класс) основание, то возможно прийти к ситуации, где класс (блок памяти) удален / освобожденный, в то время как используемый или использовал, после того, как удалено / освобожденный.
Как тест, для которого, Вы могли добавить примитивы синхронизации к каждому классу и методу. Это сделает Ваш код медленнее, потому что много объектов должны будут ожидать друг друга, но если это устранит повреждение "кучи", Ваша проблема повреждения "кучи" станет оптимизацией кода один.
Вы можете «видеть насквозь» прокси-сервер и получить адрес исходного запрашивающего из заголовка X-FORWARDED-FOR
, используя
request.getHeader( "X-FORWARDED-FOR" );
Я полагаю, прокси-сервер неверно работает между исходный запросчик и ваш сервер могут привести к потере истинного значения.
Что вам нужно, так это чтобы ваш обратный прокси-сервер передавал исходный IP-адрес в специальном заголовке, например x-forwarded-for
. Затем вы можете получить этот заголовок из своего сервлета. Кроме того, вы можете изменить свой файл журнала для регистрации этого IP-адреса. Пример:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="access_log." suffix=".txt"
fileDateFormat="yyyy-MM-dd"
pattern="%{x-forwarded-for}i %l - %t "%r" %s %b "%{referer}i" "%{user-agent}i""
resolveHosts="false"/>