@satmurat

Как правильно конфигурировать Jetty 9 embedded?

Я таким образом запускаю Jetty embedded.
QueuedThreadPool threadPool = new QueuedThreadPool(50, 10);
        Server server = new Server(threadPool);
        ServerConnector connector = new ServerConnector(server);
        connector.setIdleTimeout(30000);
        connector.setPort(8000);

        ServletContextHandler context0 = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
        context0.setContextPath("/cameraImages");
        context0.addServlet(new ServletHolder(new MyServlet(this.images)), "/*");

        server.setHandler(context0);
        server.addConnector(connector);

        try {
            server.start();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
        }

Проблема в том, что со временем ( где-то через 5-6 часов) произойдет переполнение памяти, когда запросы идут из двух nodeJS-клиентов идет каждые 7 секунд. Память проанализировал, но толком не понял. Дело в том, что там содержались записи заголовки Response и видимо не удалялись. А когда протестировал с помощью Apache JMeter таких проблем не возникло, все работало стабильно. В чем может быть проблема? Может у nodeJS какая-то специфика?
  • Вопрос задан
  • 436 просмотров
Решения вопроса 1
@satmurat Автор вопроса
Могу:
public class MyServlet extends HttpServlet {
    private final ConcurrentMap<Integer, String> images;
    private final static String RESPONSE_TYPE = "text/plain";
    private final static String ID_KEY = "id";
    private final static String JPEG_KEY = "jpeg";
    private final static Logger log = Logger.getLogger(MyServlet.class);
    public MyServlet(ConcurrentMap<Integer, String> images) {
        this.images = images;
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType(RESPONSE_TYPE);
        String img = null;
        ImagesToJSON itj = new ImagesToJSON();
        img = itj.toString(images);
        if (img == null) {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
       response.getWriter().println(img);
    }
}


UPD
Виновником оказался nodeJS. Он в заголовке запроса отправляет "keep alive", а после получения ответа соединение не закрывается. Каждый раз nodeJS создал нового клиента и удерживал соединение.

UPD2
Я использовал jetty версии 9.3.0.M1, то есть milestone, а не release. Проблема была устранена после обновления библиотек до версии release 9.3.3.v20150827. Дело не в "keep alive". Вот тебе невнимательность.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@j_wayne
А MyServlet приложить можете?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы