У меня есть веб-приложение, которое состоит из Java-части и PHP-части. Когда пользователь делает запрос, процесс php откроет соединение tcp / ip с процессом java. Это соединение будет оставаться открытым в течение всего запроса, и это соединение будет использоваться для отправки большого количества информации туда и обратно. Это приложение работает очень хорошо, если оно размещено на выделенном сервере или на виртуальной машине, использующей OpenVZ.
Как только я пытаюсь разместить его на виртуальной машине KVM, он становится очень медленным. Причина этого заключается в том, что в рамках одного запроса пользователя процесс php может легко выполнить до 1 или 2 тысяч tcp-ip-запросов в процесс java. Теперь, поскольку все это выполняется по одному и тому же соединению, это действительно не должно быть проблемой, но на виртуальных машинах KVM кажется, что каждая отправка получает задержку около 20 миллисекунд, поэтому теперь запрос, который обычно занимает 0,1 секунды, вместо этого занимает 20 секунд.
Я не на 100% уверен, что виноват KVM, но я проверил это на 3 разных провайдерах хостинга, использующих OpenVZ, и еще 3х разных провайдерах хостинга, использующих KVM. Он отлично работает на всех хостах OpenVZ, и проблема задержки отправки присутствует на всех хостах KVM.
O и я установил tcpnodelay как на стороне Java, так и на стороне PHP.
Любая идея, что я мог бы попытаться сделать эту работу на KVM?
Задача ещё не решена.
Других решений пока нет …