Java OutOfMemoryError に問題があります。このプログラムは基本的に、mysql ワークベンチで実行されている mysql テーブルを調べ、クエリを実行して特定の情報を取得し、CSV ファイルに入れます。
プログラムは小さなデータ セットでは問題なく動作しますが、大きなデータ セットを使用すると (おそらく 40 分ではなく、何時間もの情報をログに記録する必要があります)、このエラーが発生します。これは、問題が巨大なデータ セットを持つことに起因することを示しています。また、情報がプログラムによって適切に処理されていません。または、私が持っている方法でこの量のデータを処理することは不可能です.
Java VM 引数を -xmx1024m に設定すると、わずかに大きなデータセットで機能しましたが、さらに大きなデータセットを処理する必要がありますが、エラーが発生します。
これは、プログラムのどこかの原因であると確信している方法です。
// CSV is csvwriter (external lib), sment are Statements, rs is a ResultSet
public void pidsforlog() throws IOException
{
String[] procs;
int count = 0;
String temp = "";
System.out.println("Commence getting PID's out of Log");
try {
sment = con.createStatement();
sment2 = con.createStatement();
String query1a = "SELECT * FROM log, cpuinfo, memoryinfo";
rs = sment.executeQuery(query1a);
procs = new String[countThrough(rs)];
// SIMPLY GETS UNIQUE PROCESSES OUT OF TABLES AND STORES IN ARRAY
while (rs.next()) {
temp = rs.getString("Process");
if(Arrays.asList(procs).contains(temp)) {
} else {
procs[count] = temp;
count++;
}
}
// BELIEVE THE PROBLEM LIES BELOW HERE. SIZE OF THE RESULTSET TOO BIG?
for(int i = 0; i < procs.length; i++) {
if(procs[i] == null) {
} else {
String query = "SELECT DISTINCT * FROM log, cpuinfo, memoryinfo WHERE log.Process = " + "'" + procs[i] + "'" + " AND cpuinfo.Process = " + "'" + procs[i] + "'" + " AND memoryinfo.Process = " + "'" + procs[i] + "' AND log.Timestamp = cpuinfo.Timestamp = memoryinfo.Timestamp";
System.out.println(query);
rs = sment.executeQuery(query);
writer = new CSVWriter(new FileWriter(procs[i] + ".csv"), ',');
writer.writeAll(rs, true);
writer.flush();
}
}
writer.close();
} catch (SQLException e) {
notify("Error pidslog", e);
}
}; // end of method
この問題を解決したくてたまらないので、ソース コードや詳細情報が必要な場合はお気軽にお問い合わせください。
ありがとう。