我正在爲壓力測試創建一個應用程序。以1500做到這一點,並通過受審覈方的內部網絡進行1500線程同時連接。在1500圈內被稱爲線程,每個線程在套接字關閉後重新打開並重新發送相同的數據時調用一個套接字。問題是,應用程序給我錯誤,說有無限循環和stackoverflows被提出,但想法是創建Java遞歸調用,但不離開我。我可以做什麼?遞歸線程中的java.lang.OutOfMemoryError
主要類:
public void startStres(){
for(int n = 1; n <= Integer.parseInt(valueThreads.getText().toString()); n++)
robots.add(new robot(this, n, valueUrl.getText().toString()));
valueTotal.setText(Integer.toString(robots.size()));
for(final robot bot : robots)
new Thread(new Runnable() {
public void run() {
bot.start();
}
}).start();
}
在Robot類:
public void start(){
context.robotOnConnecting(idUnique);
try {
socketHandle = new Socket(InetAddress.getByName(dataConnection.host), dataConnection.port);
context.robotOnConnect(idUnique);
PrintWriter writer = new PrintWriter(socketHandle.getOutputStream());
writer.print(
"GET " + dataConnection.query + " HTTP/1.1\n" +
"Host: " + dataConnection.host + "\n" +
"User-Agent: " + dataConnection.userAgent + "\n" +
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n" +
"Accept-Language: en-US,en;q=0.5\n" +
"Accept-Encoding: gzip, deflate\n" +
"Connection: keep-alive\n\n"
);
writer.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(socketHandle.getInputStream()));
char[] bt = new char[1];
br.read(bt, 0, 1);
br.close();
socketHandle.close();
context.robotOnFinish(idUnique);
context.robotOnClose(this, idUnique, true);
//start(); <-- Error
} catch (IOException e) {
context.robotOnError(idUnique, e.getMessage());
context.robotOnClose(this, idUnique, false);
//start(); <-- Error
// e.printStackTrace();
}
}
錯誤:
526-1073/com.x.audits.strestesting D/dalvikvm﹕ GC_FOR_ALLOC freed 16K, 21% free 50827K/63572K, paused 41ms, total 41ms
526-1095/com.x.audits.strestesting I/dalvikvm﹕ threadid=25: stack overflow on call to Ljava/lang/ThreadLocal;.get:L
526-1095/com.x.audits.strestesting I/dalvikvm﹕ method requires 28+20+8=56 bytes, fp is 0x761f9314 (20 left)
526-1095/com.x.audits.strestesting I/dalvikvm﹕ expanding stack end (0x761f9300 to 0x761f9000)
526-1095/com.x.audits.strestesting I/dalvikvm﹕ Shrank stack (to 0x761f9300, curFrame is 0x761f9488)
526-1089/com.x.audits.strestesting I/dalvikvm﹕ threadid=19: stack overflow on call to Ljava/lang/ThreadLocal;.get:L
526-1089/com.x.audits.strestesting I/dalvikvm﹕ method requires 28+20+8=56 bytes, fp is 0x76189314 (20 left)
526-1089/com.x.audits.strestesting I/dalvikvm﹕ expanding stack end (0x76189300 to 0x76189000)
526-1089/com.x.audits.strestesting I/dalvikvm﹕ Shrank stack (to 0x76189300, curFrame is 0x76189488)
526-1089/com.x.audits.strestesting W/dalvikvm﹕ threadid=19: thread exiting with uncaught exception (group=0x418a8898)
526-1095/com.x.audits.strestesting W/dalvikvm﹕ threadid=25: thread exiting with uncaught exception (group=0x418a8898)
堆棧溢出? – Unihedron 2014-09-18 22:59:29