KGS Issue - Client Memory Consumption
Dieter: This page has a wrong title, is not about Go and instead contains a dump of memory useage. Request for deletion?.
Hu: I disagree. This page is designed to assist the efficacy of using a popular Go server to play Go. The large process table is not very useful and should be summarized or deleted. The page has been retitled to correct the spelling error. Perhaps this page should be wiped in 2005 or sooner since CGoban2 is evolving all the time and the memory consumption here may no longer be accurate, or as much of a problem, by then.
If this page is useful, then correct the spelling of the title, please.
jab: (after a discussion on KGS Wishlist / Technical )
At 1) I clicked on 4 SGF in mozilla, four independent instances of Cgoban opened, each taking away quite some memory.
At 2) I opened one Cgoban main window and clicked 4 times the "Edit SGF File" button to also end up with four goban's. This time they shared the main instance of Cgoban, thus taking away much less memory.
From the numbers below I say case 1) takes away more memory than case 2) - and case 1) will be used in all instances where mime/link (click and go) is used. mgoetze Do you agree ?
mgoetze: No, ps tells you how much memory each process is accessing, but not how much of that is shared with other processes. In one case you are counting a certain memory region once, and in the other case you are counting that same memory region four times.
jab: That might be right and I am not speaking about the absolut numbers cgoban compared to acroread. Let us take a /usr/local/bin/cgoban line in the ps output, which represents one time cgoban run by a jvm with all its shared libraries. In case 1) we have this line four times in 2) just once (just as a note in both cases 4 sgf editors were open). For the shared libraries your remark is true, but for the jvms not. Also I believe that most of the java api is implemented not by shared libraries, which would render the sandbox idea void. Anyway maybe I should not try to give numbers myself, but ask directly for a proof against my claim. My claim is that memory wise on a xterm:
cgoban f1.sgf ; cgoban f2.sgf ; cgoban f3.sgf ≫ cgoban f1.sgf f2.sgf f3.sgf
while
acroread file1.pdf ; acroread file2.pdf; acroread file3.pdf ≈ acroread file1.pdf file2.pdf file3.pdf
Anybody points against or for this claim ?
mgoetze: I am not at all interested in the implementation of Java, but I'll stick to what I've said from the start - there's nothing that can be changed in CGoban to satisfy your "wish", wish is therefore quite pointless.
- os? see below for an analysis of Java memory consumption using memstat, plus Java source code on subpage KGS Issue - Client Memory Consumption / Single Client showing how to solve the problem. Your statement that "nothing can be changed" is wrong; jab's wish is anything but "pointless".
Cheyenne: First try doing java -jar cgoban.jar f1.sgf; ... _ This eliminates the shell script surrounding the java invocation. Next you should try doing the same test with another java application (just find a "hello world" type of application). I suspect again that the results you are seeing are with the java runtime environment and not with cgoban application itself.
Rakshasa: "size" and "tsiz" are more interesting than pmem.
Cheyenne: Take a close look at how mozilla is invoking cgoban. It is invoking it indirectly via the shell. You are not dealing with a browser plug in, but an external invocation of an app. The reason why you see acrobat with only one instance is that acrobat provides a browser plugin interface.
If you are really concerned about how much memory per instance cgoban is using, just launch cgoban directly and edit the sgf files via the cgoban menu.
jab: Cheyenne, I agree to launch it directly and edit via sgf menu - that is what I do at the moment. And I am not saying my request is urgent, just that it would be a nice feature to add.
I will also see if the plugin invocation helps. I just want to state that I didn't compare it to acrobat invoced by mozilla (help>plugins>shows I have none installed), but by doing "acrobat x.pdf; acrobat y.pdf; acrobat z.pdf" on a shell. So it should be comparable to indirect invocation via shell of mozilla.
Below the exact numbers (to the top comment):
1)
ps -Heo pid,ppid,user,pmem,cmd
PID PPID USER %MEM CMD 1 0 root 0.0 init 2108 1 jab 0.0 kdeinit: Running... 2174 2108 jab 0.0 /bin/sh /usr/local/mozilla/run-mozilla.sh /usr/local/mozilla/mozilla-bin 2180 2174 jab 14.8 /usr/local/mozilla/mozilla-bin 2181 2180 jab 14.8 /usr/local/mozilla/mozilla-bin 9347 2181 jab 14.8 /usr/local/mozilla/mozilla-bin 9348 9347 jab 0.0 /bin/sh /usr/local/bin/cgoban /tmp/mirkof-jab-20030701.sgf 9349 9348 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9350 9349 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9351 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9352 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9353 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9354 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9355 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9356 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9357 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9368 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9381 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9387 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9392 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9394 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9397 9350 jab 9.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/mirkof-jab-20030701.sgf 9358 9347 jab 0.0 /bin/sh /usr/local/bin/cgoban /tmp/wfholden-jab-20030726.sgf 9359 9358 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9360 9359 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9361 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9362 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9363 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9364 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9365 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9366 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9367 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9372 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9384 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9388 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9391 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9393 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9398 9360 jab 8.5 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/wfholden-jab-20030726.sgf 9369 9347 jab 0.0 /bin/sh /usr/local/bin/cgoban /tmp/ynohoo-jab-20030802.sgf 9370 9369 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9371 9370 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9373 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9374 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9375 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9376 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9377 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9378 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9379 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9380 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9383 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9389 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9390 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9395 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf 9396 9371 jab 9.6 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/ynohoo-jab-20030802.sgf
9413 9347 jab 0.9 /bin/sh /usr/local/bin/cgoban /tmp/goaddict-jab-20040326.sgf
9414 9413 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9415 9414 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9416 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9417 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9418 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9419 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9420 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9421 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9422 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9423 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9424 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9425 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9426 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9427 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
9428 9415 jab 31.0 java -jar /usr/local/src/cgoban/cgoban.jar /tmp/goaddict-jab-20040326.sgf
2243 2180 jab 0.0 netstat? <defunct>
2)
ps -Heo pid,ppid,user,pmem,cmd
PID PPID USER %MEM CMD 1 0 root 0.0 init 2152 1 jab 3.7 kdeinit: kdesktop 2195 2152 jab 0.0 /bin/sh /usr/local/bin/cgoban 2196 2195 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2197 2196 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2198 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2199 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2200 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2201 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2202 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2203 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2204 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2205 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2206 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2207 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2208 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2210 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2214 2197 jab 7.3 java -jar /usr/local/src/cgoban/cgoban.jar 2626 2152 jab 0.4 /opt/kde3/bin/kdesktop_lock
Neil: Here are my figures on FreeBSD 4.9 with native-compiled (not using Linux compat, that is) jdk 1.4.1:
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND neil 536 6.5 10.2 222656 52988 p0 S 4:22PM 0:10.98 java -jar cgoban.jar
[Paths removed in command line from java and cgoban.jar for legibility]
This data was taken with the client logged in, having open a few rooms and one completed game. The client was just opened, so there is no time for a slow and long memory leak to account for those 200MB and 50MB figures.
os? Yes, it is difficult to evaluate memory consumption correctly from "ps" and "top" output. Fortunately, under Linux we have "memstat", which tells you precisely what is going on.
I have started two cgoban clients via Java Webstart, with the following process ids:
17553 ? Sl 0:00 /opt/sun-j2sdk-1.4.2/jre/bin/java -Xbootclasspath/a:/opt/sun-j2sdk-1.4.2/jre/javaws/javaws.jar -classpath /opt/sun-j2sdk-1.4.2/jre/javaws/javaws-l10n.jar -Djnlpx.home=/opt/sun-j2sdk-1.4.2/jre/javaws -Djnlpx.splashport=32904 -Djnlpx.jvm=/opt/sun-j2sdk-1.4.2/jre/bin/java -Djnlpx.remove=false -Djava.security.policy=file:/opt/sun-j2sdk-1.4.2/jre/javaws/javaws.policy -DtrustProxy=true -Djnlpx.heapsize=NULL,NULL -Djnlpx.deployment.system.home=/etc/.java/.deployment -Djnlpx.deployment.user.home=/home/os/.java/.deployment com.sun.javaws.Mainhttp://kgs.kiseido.com/javaBin/cgoban.jnlp 18535 ? Sl 0:00 /opt/sun-j2sdk-1.4.2/jre/bin/java -Xbootclasspath/a:/opt/sun-j2sdk-1.4.2/jre/javaws/javaws.jar -classpath /opt/sun-j2sdk-1.4.2/jre/javaws/javaws-l10n.jar -Djnlpx.home=/opt/sun-j2sdk-1.4.2/jre/javaws -Djnlpx.splashport=32912 -Djnlpx.jvm=/opt/sun-j2sdk-1.4.2/jre/bin/java -Djnlpx.remove=false -Djava.security.policy=file:/opt/sun-j2sdk-1.4.2/jre/javaws/javaws.policy
-DtrustProxy=true -Djnlpx.heapsize=NULL,NULL -Djnlpx.deployment.system.home=/etc/.java/.deployment -Djnlpx.deployment.user.home=/home/os/.java/.deployment com.sun.javaws.Mainhttp://kgs.kiseido.com/javaBin/cgoban.jnlp
What these clients do in memory is revealed by
$ memstat -w | egrep '17553|18535' 177652k: PID 17553 (/opt/sun-j2sdk-1.4.2/jre/bin/java) 177656k: PID 18535 (/opt/sun-j2sdk-1.4.2/jre/bin/java) 1132k: /SYSV00000000 8209 17553 1148k: /SYSV00000000 8209 17553 3592k: /SYSV00000000 8209 17553 1132k: /SYSV00000000 8209 18535 1148k: /SYSV00000000 8209 18535 3592k: /SYSV00000000 8209 18535 84k: /lib/ld-2.3.3.so 1 349 [...] 10233 12846 12931 13079 15931 16054 16055 16058 17216 17217 17553 18535 24936 24937 1052k: /lib/libc-2.3.3.so 1 349 [...] 10233 12846 12931 13079 15931 16054 16055 16058 17216 17217 17553 18535 24936 24937 128k: /lib/libm-2.3.3.so 7918 7970 8014 8209 8325 8408 8421 8422 8436 8437 8438 8439 8441 12931 13079 17216 17553 18535 8k: /lib/libdl-2.3.3.so 349 [...] 10233 12846 12931 13079 15931 16054 16055 16058 17216 17553 18535 24937 72k: /lib/libnsl-2.3.3.so 349 [...] 10233 12931 13079 15931 16055 16058 17216 17553 18535 24937 56k: /lib/libpthread-0.61.so 8014 8325 12931 13079 17553 18535 1104k: /home/os/.java/.deployment/javaws/cache/http/Dkgs.kiseido.com/P80/DMjavaBin/RMcgoban.jar 17553 18535 60k: /lib/libresolv-2.3.3.so 6655 7918 7970 7971 7973 8117 12931 15931 17553 18535 24k: /usr/lib/gconv/gconv-modules.cache 7971 7973 8117 8410 8424 12846 12931 13079 15931 16054 16058 17216 17553 18535 24937 16k: /tmp/hsperfdata_os/17553 17553 2048k: /usr/lib/locale/locale-archive 8325 8408 8410 8422 8424 8436 8437 8438 8440 8441 12846 12931 13079 16054 16058 17216 17553 18535 24937 32k: /lib/libnss_files-2.3.3.so 349 [...] 10233 12931 13079 15931 16055 16058 17216 17553 18535 24937 28k: /lib/libnss_compat-2.3.3.so 349 7520 7751 7918 8014 8054 8210 8424 8438 10233 12931 13079 15931 16055 16058 17216 17553 18535 24937 8k: /usr/lib/gconv/ISO8859-1.so 8410 8424 12846 12931 13079 16054 16058 17216 17553 18535 24937 16k: /lib/libnss_dns-2.3.3.so 7918 7970 12931 17553 18535 32k: /lib/libnss_nis-2.3.3.so 349 7520 7751 7918 8014 8054 8210 8424 8438 10233 12931 13079 15931 16055 16058 17216 17553 18535 24937 784k: /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.4/libstdc++.so.5.0.6 12931 17553 18535 32k: /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.4/libgcc_s.so.1 12931 17553 18535 8k: /usr/X11R6/lib/X11/locale/lib/common/xlcDef.so.2 8206 [...] 8441 12931 16054 17216 17553 18535 884k: /usr/X11R6/lib/libX11.so.6.2 8206 8210 8408 8409 8410 8421 8422 8436 8437 8438 8439 8440 8441 12931 16054 17216 17553 18535 20k: /usr/X11R6/lib/libXtst.so.6.1 17553 18535 28k: /usr/X11R6/lib/libXp.so.6.2 12931 17216 17553 18535 32k: /usr/X11R6/lib/libXcursor.so.1.0 8210 8408 8409 8410 8438 8439 8440 12931 16054 17216 17553 18535 80k: /usr/X11R6/lib/libICE.so.6.3 8206 8210 8408 8409 8410 8421 8422 8436 8437 8438 8439 8440 8441 12931 16054 17216 17553 18535 32k: /usr/X11R6/lib/libSM.so.6.0 8206 8210 8408 8409 8410 8421 8422 8436 8437 8438 8439 8440 8441 12931 16054 17216 17553 18535 320k: /usr/X11R6/lib/libXt.so.6.0 8206 8210 8409 8410 8438 8439 8440 12931 16054 17216 17553 18535 28k: /usr/X11R6/lib/libXrender.so.1.2 8210 8408 8409 8410 8421 8422 8436 8437 8438 8439 8440 8441 12931 16054 17216 17553 18535 8k: /usr/X11R6/lib/libXau.so.6.0 8206 8209 8210 12931 17216 17553 18535 52k: /usr/X11R6/lib/libXext.so.6.4 8206 8210 8408 8409 8410 8421 8422 8436 8437 8438 8439 8440 8441 12931 16054 17216 17553 18535 116k: /usr/X11R6/lib/X11/locale/lib/common/ximcp.so.2 8210 8409 8410 12931 16054 17216 17553 18535 20k: /opt/sun-j2sdk-1.4.2/jre/bin/java 17553 18535 56k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/libnet.so 17553 18535 12k: /opt/sun-j2sdk-1.4.2/jre/lib/ext/dnsns.jar 17553 18535 112k: /opt/sun-j2sdk-1.4.2/jre/lib/ext/sunjce_provider.jar 17553 18535
52k: /opt/sun-j2sdk-1.4.2/jre/lib/ext/ldapsec.jar 17553 18535 416k: /opt/sun-j2sdk-1.4.2/jre/lib/ext/localedata.jar 17553 18535 56k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/libverify.so 17553 18535 540k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/libfontmanager.so 17553 18535 60k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/libzip.so 17553 18535 28k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/native_threads/libhpi.so 17553 18535 2752k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/client/libjvm.so 17553 18535 284k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/libmlib_image.so 17553 18535 108k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/libjava.so 17553 18535 152k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/libdcpr.so 17553 18535 148k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/libjpeg.so 17553 18535 2656k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/libawt.so 17553 18535 204k: /opt/sun-j2sdk-1.4.2/jre/lib/i386/libcmm.so 17553 18535 456k: /opt/sun-j2sdk-1.4.2/jre/lib/jsse.jar 17553 18535 88k: /opt/sun-j2sdk-1.4.2/jre/lib/sunrsasign.jar 17553 18535 2888k: /opt/sun-j2sdk-1.4.2/jre/lib/charsets.jar 17553 18535 26204k: /opt/sun-j2sdk-1.4.2/jre/lib/rt.jar 17553 18535 68k: /opt/sun-j2sdk-1.4.2/jre/lib/jce.jar 17553 18535 96k: /opt/sun-j2sdk-1.4.2/jre/javaws/javaws-l10n.jar 17553 18535 616k: /opt/sun-j2sdk-1.4.2/jre/javaws/javaws.jar 17553 18535 16k: /tmp/hsperfdata_os/18535 18535
First, we see the private memory segments of the processes, i.e., each process has 177 MB to itself. Then follow a few shared memory segments and the shared libraries used by the processes. As can be seen, roughly the first half of libraries is shared with many other process running on my system; the latter half is unique to processes running the Java virtual machine (here, only the two CGoban processes, but there could be more in general). However, it is clearly visible that 2 times approx. 177MB are used for the private memory segments of the processes, which can be reduced to 1 times approx. 177MB, if there were just one Java process (Note that my system uses NPTL, hence threads do not appear as processes).
A solution can be constructed using a dedicated port for the CGoban clients to communicate among each other. The code on KGS Issue - Client Memory Consumption / Single Client shows the idea: compiling the Code and starting it repeatedly with
java SingleClient SomeText &
makes all the SomeText arguments appear in the window opened by the first process. The other processes deliver their message to that one, then exit.
This is just a quick hack, which has the security problem that anyone can communicate through the port. A better solution would be to create a socket in the file system and provide it with the appropriate protection, but I am not sure whether that approach is portable.