KGS Issue - Client Memory Consumption

    Keywords: Online Go

This page may be removed.
This page is considered superfluous or obsolete and will be removed. If you object against removing this page, kindly remove the removal template from the page content, give an explanatory note in the summary and possibly improve the page or linkage to it, so that its purpose becomes clearer.
Reason: Dieter: This page has a wrong title, is not about Go and instead contains a dump of memory useage.


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 [ext] 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.Main [ext] http://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.Main [ext] http://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.


This is a copy of the living page "KGS Issue - Client Memory Consumption" at Sensei's Library.
(OC) 2012 the Authors, published under the OpenContent License V1.0.
[Welcome to Sensei's Library!]
StartingPoints
ReferenceSection
About