JVM調優筆記

java -Djava.security.egd=file:/dev/./urandom  -Xms128m -Xmx128m -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/javadump -jar user.jar &

java 
-Djava.security.egd=file:/dev/./urandom  
-Xms128m 
-Xmx128m 
-XX:MetaspaceSize=128M 
-XX:MaxMetaspaceSize=128M 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/var/log/javadump 
-jar yzh-message.jar &

1)-Djava.security.egd=file:/dev/./urandom :採用非阻塞的熵源(entropy source)
和隨機數生成有關,tomcat服務器中的sessionId。
/dev/random設備會返回小於熵池噪聲總數的隨機字節。
/dev/random可生成高隨機性的公鑰或一次性密碼本。若熵池空了,對/dev/random的讀操作將會被阻塞,直到收集到了足夠的環境噪聲爲止
/dev/urandom 則是一個非阻塞的發生器:
(”unlocked”,非阻塞的隨機數發生器),它會重複使用熵池中的數據以產生僞隨機數據。這表示對/dev/urandom的讀取操作不會產生阻塞,但其輸出的熵可能小於/dev/random的。它可以作爲生成較低強度密碼的僞隨機數生成器,不建議用於生成高強度長期密碼。
但這裏值爲何要在dev和random之間加一個點呢?是因爲一個jdk的bug,在這個bug的連接裏有人反饋及時對 securerandom.source 設置爲 /dev/urandom 它也仍然使用的 /dev/random,有人提供了變通的解決方法,其中一個變通的做法是對securerandom.source設置爲 /dev/./urandom 才行。
曾經看過Jdk的相關源碼,當java.security.egd值爲file:/dev/urandom或者file:/dev/random時,都用的是阻塞的熵源,所以就是爲什麼file:/dev/urandom不生效, 而中間多一個點就生效了。

2)java中堆內存的設置,一般設置爲同樣大小
-Xms128m :初始堆大小爲128M
-Xmx128m :最大堆大小爲128M

3)元空間,使用的內存是本地的內存
-XX:MetaspaceSize=128M 
-XX:MaxMetaspaceSize=128M :這個參數用於限制Metaspace增長的上限,防止因爲某些情況導致Metaspace無限的使用本地內存,影響到其他程序。在本機上該參數的默認值爲4294967295B(大約4096MB)。

4)內存溢出
-XX:+HeapDumpOnOutOfMemoryError :內存溢出時生成heapdump文件
參數:
-XX:HeapDumpPath=/var/log/javadump :內存溢出後,heapdump文件存放的位置

/dev/urandom:
Started TestApplication in 7.388 seconds (JVM running for 8.37)
Started TestApplication in 7.064 seconds (JVM running for 8.06)
Started TestApplication in 7.376 seconds (JVM running for 8.361)
/dev/random
Started TestApplication in 7.144 seconds (JVM running for 8.196)
Started TestApplication in 7.38 seconds (JVM running for 8.372)
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章