Что может быть причиной большой лаги между выходом из контроллера RESTeasy и входом в MainFilter? - PullRequest
1 голос
/ 15 июня 2009

У меня есть EJB RESTEasy контроллер с CMT.

Один критический метод, который создает некоторые объекты в БД, работает нормально и быстро при одном вызове.

Но когда я пытаюсь вызвать его одновременно 10 пользователями, он работает очень медленно.

Я отслеживал время в журналах, и самое расширенное место по сравнению с одиночным вызовом задержка между выходом из контроллера RESTeasy и входом в MainFilter.

Таким образом, эта задержка увеличивается с 0-1 мс для одного вызова до 8 сек. за 10 одновременных вызовов!

Мне нужны идеи, что может быть причиной и как я могу ускорить ее.

Ответы [ 3 ]

0 голосов
/ 15 июня 2009

Блокировать разногласия из-за новых потоков? база данных? Очень трудно предсказать, где находится узкое место.

0 голосов
/ 15 июня 2009

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

Однако вы говорите, что код создает некоторые объекты в базе данных, но вы не говорите, выполняет ли код какие-либо обновления или выборки. Простое выполнение вставок обычно не создает проблемы с блокировкой для большинства баз данных, если только нет связанных обновлений или вариантов выбора (то есть выбор для обновления в Oracle).

Проверьте и посмотрите, есть ли какие-либо ресурсы, такие как таблица ключей или родительская запись, которые обновляются, которые могут вызывать проблему.

Также проверьте документацию JDBC. Большинство драйверов JDBC имеют уровни ведения журнала, которые должны позволять вам видеть операции, выполняемые с базой данных. Хотя это может привести к созданию большого журнала, если вы включите в него идентификатор потока, вы сможете увидеть, где возникают проблемы.

0 голосов
/ 15 июня 2009

Моя немедленная реакция - проблема с блокировкой базы данных. Можете ли вы сказать, возникает ли задержка при прохождении потока управления через границу транзакции? Попробуйте старую технику засорения вашего кода операторами print, чтобы увидеть, когда все закончится.

...