Процесс будет работать нормально весь день, тогда, Бэм, без предупреждения, он выдаст эту ошибку. Иногда, казалось бы, в середине ничего не делать. Это будет происходить в, казалось бы, случайное время в течение дня. Я проверил, работает ли что-нибудь еще на машине, как запланированные резервные копии или что-то, но ничего не нашел. У машины достаточно физической памяти (2 ГБ, около 1 ГБ свободно для загрузки 3-500 МБ) и достаточно заданного значения -Xmx.
Согласно нашему системному администратору, проблема в том, что оперативная память, которую ядро использует в качестве дискового кэша (очевидно, все, кроме 8 МБ), не освобождается, когда JVM необходимо выделить память, поэтому процесс JVM выдает ошибку OutOfMemoryError. Это может быть связано с тем, что Java запрашивает ядро, достаточно ли памяти перед распределением, и обнаруживает, что этого недостаточно, что приводит к сбою.
Однако я хотел бы подумать, что Java просто пытается выделить память через ядро, и когда ядро получает такой запрос, оно освобождает место для приложения, выбрасывая часть нашего дискового кэша.
Кто-нибудь еще сталкивался с проблемой, и если да, то в чем была ошибка, и как вы ее решили?
В настоящее время мы используем jdk1.6.0_20 в SLES 10 SP2 Linux 2.6.16.60-0.42.9-smp в VMWare ESX.