ich habe in eine externe Anwendung, die nichts anderes als ein RMI-Server mit spezieller Schnittstelle bereitstellt, meine eigene Anwendung (Implementierung der Schnittstelle*) eingebunden.
Der RMI-Server wird von einem Webserver bzw. einer dort installierten WebApp angesprochen.
Das große Problem ist, dass der Server extrem CPU-lastig ist. Macht man Profiling mit JVisualVM fällt auf, dass 2/3 der CPU Zeit für "sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()" draufgehen. An zweiter Position (find ich auch bemerkenswert) ist "sun.net.www.http.KeepAliveCache.run()" mit 16% CPU-Zeit. Summa Summarum gehen offensichtlich 80% für Netzwerkoverhead drauf?!
Erst an 4. Stelle kommt die "eigentliche" CPU-Zeit "scale" der ImageIO.
Nun ist die Frage: hat irgendwer hier tiefere Ahnung von RMI und eventuell von entsprechender Betriebssystemkonfiguration (MS Server 2003) ? Ich gehe mal davon aus, dass so ein Overhead bei RMI nicht normal ist und das die entsprechenden Komponenten ihre CPU-Zeit mit warten verbringen?!
*Die Schittstelle bietet eine Methode "getImage()", die verwendete Implementierung holt sich das Image über einen WebService (Soap/Wsdl), skaliert es und liefert es als byte[] zurück.
Der RMI-Server wird von einem Webserver bzw. einer dort installierten WebApp angesprochen.
Das große Problem ist, dass der Server extrem CPU-lastig ist. Macht man Profiling mit JVisualVM fällt auf, dass 2/3 der CPU Zeit für "sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()" draufgehen. An zweiter Position (find ich auch bemerkenswert) ist "sun.net.www.http.KeepAliveCache.run()" mit 16% CPU-Zeit. Summa Summarum gehen offensichtlich 80% für Netzwerkoverhead drauf?!
Erst an 4. Stelle kommt die "eigentliche" CPU-Zeit "scale" der ImageIO.
Nun ist die Frage: hat irgendwer hier tiefere Ahnung von RMI und eventuell von entsprechender Betriebssystemkonfiguration (MS Server 2003) ? Ich gehe mal davon aus, dass so ein Overhead bei RMI nicht normal ist und das die entsprechenden Komponenten ihre CPU-Zeit mit warten verbringen?!
*Die Schittstelle bietet eine Methode "getImage()", die verwendete Implementierung holt sich das Image über einen WebService (Soap/Wsdl), skaliert es und liefert es als byte[] zurück.