My unsertandingTomcat Java NIO z jednoczesnych połączeń klienckich powolny TCP
Bez NIO:
Dla każdego keepalive serwerem połączenie nadal blokować wątku.
Z NIO:
To złącze ma kilka wątków poller używanych do utrzymania połączenia żył dla wszystkich podłączonych użytkowników podczas wątków roboczych nazywa ilekroć danych (nowe żądanie HTTP) jest dostępny
Teraz: Jeśli Mam prosty serwlet, który zwraca ciąg 100 KB do klienta (przeglądarki).
....
String HunderdKBString = "reallylongstring"
PrintWriter out = response.getWriter();
out.println(HunderdKBString);
....
Jeśli klient połączony z 1 kB łączy się, otrzymanie ciągu zajmie około 100 sekund.
Czy wątek Java zostanie zablokowany na około 100 sekund?
W jaki sposób bufor TCP, Java OutputStream
lub Writer
lub inne bufory wpływają na czas blokowania gwintu?
PS: za pomocą apache-tomcat-8.0.24 w centów 7 z Oracle JDK 1.7.
EDYCJA: Jak wspomniano wątku jest blokowane i bufor może zmniejszyć czas blokowania wątku .. Jak optymizm tomcat/OS, aby zmniejszyć czas blokowania wątku za pomocą tych buforów?
Jak można wykryć w środowisku produkcyjnym, czy tomcat jest głodny z powodu wielu podłączonych do niego powolnego klienta połączenia?
Dyskusja na temat NIO nie ma sensu. W kontenerze Tomcat nie masz możliwości zmiany technologii IO. Musisz użyć synchronicznej instancji Writera, którą zapewnia Tomcat. Zgadzam się jednak, że wiele powolnych połączeń może być poważnym problemem w świecie rzeczywistym. Ile oczekujących połączeń oczekujesz? 100? 1000? 10000? 100000? – Codo
@Codo pracujemy na stronie, która ma zachowanie obciążenia kolca. nagle 500 klientów może się połączyć, co może tłumaczyć do 500 * (4 połączenie TCP z przeglądarki) = 2000 .. i tak wiele może być powolne .. – Bhuvan
Z połączeniami równoległymi 2000 najbardziej pragmatyczne rozwiązanie polega na zwiększeniu liczby wątków roboczych Tomat do 2000 (lub nawet więcej). Dzisiejsze serwery powinny z łatwością obsługiwać tak wiele wątków. Może być jednak konieczne przydzielenie wystarczającej ilości pamięci dla Tomcat. Byłoby inaczej, gdybyśmy mówili o 100 000 połączeń. – Codo