public void sendReply_cgibin_system_info(MyHTTPServer socket, String cookie) throws Exception
	{
		List<String> reply = new ArrayList<String>();

		addHTTP200(reply, cookie);
		addPageHeader(reply, "");

                Runtime runtime = Runtime.getRuntime();
                OperatingSystemMXBean osmxb = ManagementFactory.getOperatingSystemMXBean();
                assert osmxb != null;
                RuntimeMXBean rmxb = ManagementFactory.getRuntimeMXBean();
                assert rmxb != null;
                ThreadMXBean tmxb = ManagementFactory.getThreadMXBean();
                assert tmxb != null;

		Runtime rt = Runtime.getRuntime();
		rt.gc();

		reply.add("<TABLE>");
		reply.add("<TR><TD WIDTH=150>processors:</TD><TD>" + runtime.availableProcessors() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>system architecture:</TD><TD>" + osmxb.getArch() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>OS version:</TD><TD>" + osmxb.getVersion() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>system load:</TD><TD>" + osmxb.getSystemLoadAverage() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>JVM name:</TD><TD>" + rmxb.getName() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>JVM impl.name:</TD><TD>" + rmxb.getVmName() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>JVM vendor:</TD><TD>" + rmxb.getVmVendor() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>JVM version:</TD><TD>" + rmxb.getVmVersion() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>JVM uptime:</TD><TD>" + (rmxb.getUptime() / 1000) + "s</TD></TR>");
		reply.add("<TR><TD WIDTH=150>Boot classpath:</TD><TD>" + rmxb.getBootClassPath() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>Classpath:</TD><TD>" + rmxb.getClassPath() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>deadlocked threads:</TD><TD>" + (tmxb.findDeadlockedThreads() != null ? tmxb.findDeadlockedThreads().length : 0 ) + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>number of threads:</TD><TD>" + tmxb.getThreadCount() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>total threads created:</TD><TD>" + tmxb.getTotalStartedThreadCount() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>thread peak count:</TD><TD>" + tmxb.getPeakThreadCount() + "</TD></TR>");
		reply.add("<TR><TD WIDTH=150>total CPU time:</TD><TD>" + (tmxb.getCurrentThreadCpuTime() / 1000000000) + "s</TD></TR>");
		reply.add("<TR><TD WIDTH=150>maximum memory:</TD><TD>" + ((rt.maxMemory() + 1048575) / 1048576) + "MB</TD></TR>");
		reply.add("<TR><TD WIDTH=150>total memory:</TD><TD>" +  ((rt.totalMemory() + 1048575) / 1048576) + "MB</TD></TR>");
		reply.add("<TR><TD WIDTH=150>free memory:</TD><TD>" + ((rt.freeMemory() + 1048575) / 1048576) + "MB</TD></TR>");
		// reply.add("<TR><TD WIDTH=150></TD><TD>" +  + "</TD></TR>");

		addPageTail(reply, true);

		socket.sendReply(reply);
	}