Zbudowałem niestandardowy serwer komunikatów w Javie, który pobiera strumień wiadomości i dostarcza każdą wiadomość do swojego klienta (1: 1, drop msg, jeśli nie jest podłączony - bardzo prosty). Używam Tomcat 7 na Win7x64 & Java 7 i korzystam ze złącza NIO (zaimplementowałem serwlet Comet). Działa wspaniale, ale teraz szukam skalowania tej bestii i obecnie widzę około 85kb pamięci RAM przydzielonej dla każdego podłączonego klienta. 10.000 klientów przy 900 MB i skalowanie liniowe. (Nie robię nic innego poza utrzymywaniem połączenia) To jest całkiem sporo według mojej opinii, więc zastanawiam się, czy są jakieś poprawki, które sprawiają, że Tomcat lub Java zapisują więcej pamięci z impulsem NIO. Wszystkie ustawienia Tomcat, które próbowałem do tej pory, nie miały na to wpływu.zminimalizować pamięć Tomcat "na połączenie"
Czy ktoś ma doświadczenie, jak umieścić Java lub Tomcat na diecie pamięci związanej z połączeniami gniazd?
AKTUALIZACJA: Jestem teraz w dół pod 70kb/połączenia przez przycinanie buforów gniazda i niektóre inne elementy wewnętrzne tomcat. Nie wiem, jak to teraz wpływa na przepustowość. Próbowałem również na 32-bitowym/64-bitowym Linuxie z tym samym wynikiem.
Jak zmierzyłeś 85kb na klienta? – dash1e
Zrobiłem mały test obciążenia i połączyłem 10.000 klientów. W kodzie serwera zrobiłem po każdych 100 klientach System.gc(), a następnie wydrukowałem Runtime.totalMemory() - Runtime.freeMemory() do konsoli. – Daniel
Witam. Czy możesz dzielić się najlepszymi ustawieniami Tomcat/JVM? Czy używałeś też złącza NIO? 10x – JRun