(Linux固有)システムコールsysinfo(struct sysinfo* info)
は以下にinfo
でいっぱい:あなたが後にあるかであるかもしれない
struct sysinfo {
long uptime; /* Seconds since boot */
unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
unsigned long totalram; /* Total usable main memory size */
unsigned long freeram; /* Available memory size */
unsigned long sharedram; /* Amount of shared memory */
unsigned long bufferram; /* Memory used by buffers */
unsigned long totalswap; /* Total swap space size */
unsigned long freeswap; /* swap space still available */
unsigned short procs; /* Number of current processes */
unsigned long totalhigh; /* Total high memory size */
unsigned long freehigh; /* Available high memory size */
unsigned int mem_unit; /* Memory unit size in bytes */
char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding for libc5 */
};
たtotalswap
とfreeswap
のうち。
Javaでネイティブのプラットフォーム呼び出しをどのように行うのかわかりませんが、これは/proc/swaps
ファイルを自分で解析する良い方法です。
EDIT:
私はJNAでビットを果たし、この思い付いた:
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Structure;
import com.sun.jna.NativeLong;
public class Test {
public interface CStdLib extends Library {
static class SysInfo extends Structure {
public NativeLong uptime;
public NativeLong[] loads = new NativeLong[3];
public NativeLong totalram;
public NativeLong freeram;
public NativeLong sharedram;
public NativeLong bufferram;
public NativeLong totalswap;
public NativeLong freeswap;
public short procs;
public NativeLong totalhigh;
public NativeLong freehigh;
public int mem_unit;
/* some padding? */
}
int sysinfo(SysInfo info);
}
public static void main(String[] args) {
CStdLib c = (CStdLib)Native.loadLibrary("c", CStdLib.class);
CStdLib.SysInfo s = new CStdLib.SysInfo();
c.sysinfo(s);
System.out.println("totalram: " + s.totalram);
}
}
は、残念ながら、あなたは値が署名long
のためには大きすぎるので、あなたの問題を持っているつもりです私のマシン上でスワップ値を読み込もうとしているときに、Javaで間違った値を取得する可能性があります。
希望すると便利です。 (警告:私はJavaプログラマ:)
と混同されていなかった)
JNIを使用してsysinfoを呼び出す方が、おそらくより堅牢なソリューションです。 –
はいこれが機能する場合があります。ありがとうございました! – user1285928