Voglio solo controllare la dimensione dello stack per tutti i miei thread in un'applicazione Java (groovy). Per l'hotspot Oracle VM, so che ci sono due parametri che lo fanno (-Xss
e XX:ThreadStackSize
).Qual è la differenza tra -Xss e -XX: ThreadStackSize?
Qual è il preferito? C'è qualche differenza tra loro? Per quanto riguarda Open JDK 7 someone asked on the mailing list, affermando che -Xss
è lo stesso per la Hotpot VM come -XX:ThreadStackSize
.
Il punto è che sto misurando quanti thread possono essere avviati sul mio sistema. Il mio script Groovy che fa questo assomiglia a:
int count = 0
def printCountThreads = {
println("XXX There were started $count threads.")
}
try {
while(true){
new Thread({Thread.sleep(Integer.MAX_VALUE)}).start()
count++
if(count % 1000 == 0){
printCountThreads()
}
}
} catch (Throwable e){
printCountThreads()
throw e
}
È interessante notare che ottengo solo un numero ridotto di di fili che utilizzano - XX:ThreadStackSize
. Sto iniziando l'applicazione groovy con e con contenuti diversi nella variabile d'ambiente JAVA_OPTS.
groovy countmax-threads.groovy
Quando ho creato JAVA_OPTS a -XX:ThreadStackSize=2m
, ottengo circa 1000 le discussioni iniziate finché non si consuma la memoria. Tuttavia, quando utilizzo JAVA_OPTS='-Xss2m'
, ottengo circa 32000 thread fino a quando non si verifica l'errore previsto. Quindi sembra che -Xss
non funzioni affatto.
Sto usando
versione java "1.8.0_05"
Java (TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot (TM) a 64 bit di server VM (build 25.5 -b02, modalità mista)
su una macchina Ubuntu 14.04 64 bit con quattro thread hardware e circa 8 GB di RAM.
UPDATE:
ho nuovamente verificata questo sul mio Windows 7 a 64 bit e macchine un'altra JDK:
versione java "1.8.0_20" Java (TM) SE Runtime Environment (build 1.8.0_20-b26) Java HotSpot (TM) a 64 bit di server VM (build 25.20-b23, modalità mista)
e ci -Xss
e -XX:ThreadStackSize
lavoro come previsto (come alcune risposte hanno sottolineato). Quindi suppongo che sia un problema specifico di Linux o anche un bug nella versione JDK 1.8.05.
Forse qualcuno può verificare sulla sua macchina con un altro vm? Ho usato groovy 2.3.9 per lo script ... – user2078148
Stesso comportamento su linux: versione java "1.8.0_45" Java (TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot (TM) 64- Bit Server VM (build 25.45-b02, modalità mista) Mi sembra un problema JVM specifico per Linux ... – user2078148