Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
JavaÓ¦ÓóÌÐòÐÔÄܵ÷ÓÅÖ¸ÄÏ£¨Ï£©
 
×÷Õߣºajian005 À´Ô´£ºCSDN ·¢²¼ÓÚ 2016-2-1
  2119  次浏览      29
 

4.4 ÍøÂçIOÏûºÄ·ÖÎö

·Ö²¼Ê½ÏµÍ³£¬ÍøÂçIOµÄÏûºÄʱ·Ç³£ÖµµÃ¹Ø×¢µÄ£¬ÓÈÆäҪעÒâÍø¿¨ÖжÏÊDz»ÊǾùºâµØ·ÖÅäµ½¸÷CPUµÄ(¿Éͨ¹ý cat /proc/interrupts ²é¿´µÄ)£¬¼ûͼ-25

ͼ-25

¶ÔÓÚÍøÂçÖжÏÖ»·ÖÅäµ½Ò»¸öCPUµÄÏÖÏó£¬google²ÉÓÃÐÞ¸ÄkernelµÄ·½·¨¶ÔÍøÂçÖжϷÖÅä²»¾ùµÄÎÊÌâ½øÐÐÐÞ¸´£¬¾ÝÆä²âÊÔÐÔÄÜ´ó¸ÅÄÜÌáÉý3x×óÓÒ£¬»òÊDzÉÓÃÖ§³ÖMSI-XµÄÍøÂçÀ´ÐÞ¸´¡£

ÓÉÓÚĬÈϵÄLinuxÄں˲ÎÊý¿¼ÂǵÄÊÇ×îͨÓõij¡¾°£¬ÕâÃ÷ÏÔ²»·ûºÏÓÃÓÚÖ§³Ö¸ß²¢·¢·ÃÎʵÄWeb·þÎñÆ÷µÄ¶¨Ò壬ËùÒÔÐèÒªÐÞ¸ÄLinux²ÎÊý£¬Ê¹µÃNginxµÈWeb·þÎñ¿ÉÒÔÓµÓиü¸ßµÄÐÔÄÜ£º

Ê×ÏÈ£¬ÐèÒªÐÞ¸Ä/etc/sysctl.confÀ´¸ü¸ÄÄں˲ÎÊý¡£ÈçÏÂ×î³£ÓõÄÅäÖÃ

fs.file-max = 999999
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 1024 61000
net.ipv4.tcp_rmem = 4096 32768 262142
net.ipv4.tcp_wmem = 4096 32768 262142
net.core.netdev_max_backlog = 8096
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn.backlog = 1024

È»ºóÖ´ÐÐ sysctl -p ÃüÁʹÉÏÊöÐÞ¸ÄÉúЧ¡£

ÉÏÃæµÄ²ÎÊýÒâÒå½âÊÍÈçÏ£º

(1) file-max:Õâ¸ö²ÎÊý±íʾ½ø³Ì(±ÈÈçÒ»¸öwork½ø³Ì)¿ÉÒÔͬʱ´ò¿ªµÄ×î´ó¾ä±úÊý£¬Õâ¸ö²ÎÊýÖ±½ÓÏÞÖÆ×î´ó²¢·¢Á¬½ÓÊý£¬Ðè¸ù¾Ýʵ¼ÊÇé¿öÅäÖá£

(2) tcp_tw_reuse: Õâ¸ö²ÎÊýÉèÖÃΪ1£¬±íʾÔÊÐí½«TIME-WAIT״̬µÄsocketÖØÐÂÓÃÓÚеÄTCPÁ¬½Ó£¬Õâ¶ÔÓÚ·þÎñÆ÷À´ËµºÜÓÐÒâÒ壬ÒòΪ·þÎñÆ÷ÉÏ×Ü»áÓдóÁ¿TIME-WAIT״̬¡£

(3) tcp_keepalive_time: Õâ¸ö²ÎÊý±íʾµ±keepaliveÆôÓÃʱ£¬TCP·¢ËÍkeepaliveÏûÏ¢µÄƵÂÊ¡£Ä¬ÈÏÊÇ2Сʱ£¬Èô½«ÆäÉèÖõÄСһЩ£¬¿ÉÒÔ¸ü¿ìµÚÇåÀíÎÞЧµÄÁ¬½Ó¡£

(4) tcp_fin_timeout: Õâ¸ö²ÎÊý±íʾµ±·þÎñÆ÷Ö÷¶¯¹Ø±ÕÁ¬½Óʱ£¬socket±£³ÖÔÚFIN-WAIT-2״̬µÄ×î´óʱ¼ä¡£

(5) tcp_max_tw_buckets: Õâ¸ö²ÎÊý±íʾ²Ù×÷ϵͳÔÊÐíTIME_WAITÌ×½Ó×ÖÊýÁ¿µÄ×î´óÖµ£¬Èç¹û³¬¹ýÕâ¸öÊý×Ö£¬TIME_WAITÌ×½Ó×Ö½«Á¢¿Ì±»Çå³ý²¡´òÓ¡¾¯¸æÐÅÏ¢¡£¸Ã²ÎÊýĬÈÏΪ180000£¬¹ý¶àµÄTIME_WAITÌ×½Ó×Ö»áʹWeb·þÎñÆ÷±äÂý¡£

(6) tcp_max_syn_backlog:Õâ¸ö²ÎÊý±íʾTCPÈý´ÎÎÕÊÖ½¨Á¢½×¶Î½ÓÊÕSYNÇëÇó¶ÓÁеÄ×î´ó³¤¶È£¬Ä¬ÈÏΪ1024£¬½«ÆäÉèÖõôóһЩ¿ÉÒÔʹ³öÏÖNginx·±Ã¦À´²»¼°acceptÐÂÁ¬½ÓµÄÇé¿öʱ£¬Linux²»ÖÁÓÚ¶ªÊ§¿Í»§¶Ë·¢ÆðµÄÁ¬½ÓÇëÇó¡£

(7) ip_local_port_range:Õâ¸ö²ÎÊý¶¨ÒåÁËÔÚUDPºÍTCPÁ¬½ÓÖб¾µØ(²»°üÀ¨Á¬½ÓµÄÔ¶¶Ë)¶Ë¿ÚµÄȡֵ·¶Î§¡£

(8) net.ipv4.tcp_rmem:Õâ¸ö²ÎÊý¶¨ÒåÁËTCP½ÓÊÕ»º´æ(ÓÃÓÚTCP½ÓÊÕ»¬¶¯´°¿Ú)µÄ×îСֵ¡¢Ä¬ÈÏÖµ¡¢×î´óÖµ¡£

(9) net.ipv4.tcp_wmem:Õâ¸ö²ÎÊý¶¨ÒåÁËTCP·¢ËÍ»º´æ(ÓÃÓÚTCP·¢ËÍ»¬¶¯´°¿Ú)µÄ×îСֵ¡¢Ä¬ÈÏÖµ¡¢×î´óÖµ¡£

(10)netdev_max_backlog:µ±Íø¿¨½ÓÊÕÊý¾Ý°üµÄËÙ¶È´óÓÚÄں˴¦ÀíµÄËÙ¶Èʱ£¬»áÓÐÒ»¸ö¶ÓÁб£´æÕâЩÊý¾Ý°ü¡£Õâ¸ö²ÎÊý±íʾ¸Ã¶ÓÁеÄ×î´óÖµ¡£

(11)rmem_default£ºÕâ¸ö²ÎÊý±íʾÄÚºËÌ×½Ó×Ö½ÓÊÕ»º´æÇøÄ¬ÈϵĴóС¡£

(12)wmem_default£ºÕâ¸ö²ÎÊý±íʾÄÚºËÌ×½Ó×Ö·¢ËÍ»º´æÇøÄ¬ÈϵĴóС¡£

(13)rmem_max: Õâ¸ö²ÎÊý±íʾÄÚºËÌ×½Ó×Ö½ÓÊÕ»º´æÇøµÄ×î´ó´óС¡£

(14)wmem_max: Õâ¸ö²ÎÊý±íʾÄÚºËÌ×½Ó×Ö·¢ËÍ»º´æÇøµÄ×î´ó´óС¡£

(15)tcp_syncookies:¸Ã²ÎÊýÓëÐÔÄÜÎ޹أ¬ÓÃÓÚ½â¾öTCPµÄSYN¹¥»÷¡£

4.4.1 ÍøÂçIO·ÖÎöµÄ³£ÓÃÃüÁî

ÔÚLinuxÖпɲÉÓÃsar·ÖÎöÍøÂçIOµÄÏûºÄ×´¿ö£¬

sar ÃüÁî

Àý×Ó£º

sar -n ALL     sar -n DEV
sar -n { <keyword> [,...] | ALL }
Network statistics
Keywords are:
DEV Network interfaces
EDEV Network interfaces (errors)
NFS NFS client
NFSD NFS server
SOCK Sockets (v4)
IP IP traffic (v4)
EIP IP traffic (v4) (errors)
ICMP ICMP traffic (v4)
EICMP ICMP traffic (v4) (errors)
TCP TCP traffic (v4)
ETCP TCP traffic (v4) (errors)
UDP UDP traffic (v4)
SOCK6 Sockets (v6)
IP6 IP traffic (v6)
EIP6 IP traffic (v6) (errors)
ICMP6 ICMP traffic (v6)
EICMP6 ICMP traffic (v6) (errors)
UDP6 UDP traffic (v6)

ͼ-26

ÉÏÃæµÄÊä³öµÄÐÅÏ¢Ö÷Òª·ÖÈý²¿·Ö£º

µÚÒ»²¿·ÖÎªÍø¿¨Éϳɹ¦½Ó°üºÍ·¢°üµÄÐÅÏ¢£¬Æä±¨¸æÖеÄÐÅÏ¢Ö÷ÒªÓÐ: rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s

µÚ¶þ²¿·ÖÎªÍø¿¨ÉÏʧ°ÜµÄ½Ó°üºÍ·¢°üµÄÐÅÏ¢£¬Æä±¨¸æÖеÄÐÅÏ¢Ö÷ÒªÓÐ: rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s

µÚÈý²¿·ÖÎªÍø¿¨ÉÏsocketsµÄͳ¼ÆÐÅÏ¢£¬Æä±¨¸æÖеÄÐÅÏ¢Ö÷ÒªÓÐ: rtotsck tcpsck udpsck rawsck ip-frag tcp-tw

¶ÔÓÚJavaÓ¦ÓöøÑÔ£¬Ê¹ÓõÄÖ÷ҪΪtcpsck ºÍ udpsck

tcpsck: Number of TCP sockets currently in use.

udpsck: Number of UDP sockets currently in use.

tcp-tw: Number of TCP sockets in TIME_WAIT state.

ÈçÐèÒªÏêϸ¸ú×ÙTCP/IPͨÐŵĹý³ÌÐÅÏ¢£¬Ôò¿Éͨ¹ýtcpdumpÃüÁî½øÐС£

²é¿´ÍøÂçµÄ³£ÓÃÃüÁ

netstat -ps
nfsstat
ethtool
snmp
ifport
ifconfig
route
arp
ping
traceroute
host
nslookup
ifconfig eth0

Linuxϲ鿴ÄÇЩUDPÀàÐͶ˿ڿª·¢£¬ÄÇЩTCP¶Ë¿Ú¿ª·Å

netstat -nupl (UDPÀàÐ͵Ķ˿Ú)

netstat -ntpl (TCPÀàÐ͵Ķ˿Ú)

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}';

4.4.2 ÍøÂçIOÏûºÄ·ÖÎö°¸Àý

ÓÉÓÚû·½·¨·ÖÎö¾ßÌåÿ¸öÏß³ÌËøÏûºÄµÄÍøÂçIO, Òò´Ëµ±ÍøÂçIOÏûºÄ¸ßʱ£¬¶ÔÓÚJavaÓ¦ÓöøÑÔÖ»ÄܶԽø³Ì½øÐÐdump£¬²éÕÒ²úÉúÁË´óÁ¿ÍøÂçIO²Ù×÷µÄÏ̡߳£ÕâЩÏ̵߳ÄÌØÕ÷ÊǶÁÈ¡»òдÈëÍøÂçÁ÷£¬ÔÚÓÃJavaʵÏÖÍøÂçͨÐÅʱ£¬Í¨³£Òª½«¶ÔÏóÐòÁл¯Îª×Ö½ÚÁ÷£¬½øÐз¢ËÍ£¬»ò¶ÁÈ¡×Ö½ÚÁ÷£¬²¢·´ÐòÁл¯Îª¶ÔÏó¡£Õâ¸ö¹ý³ÌÒªÏûºÄJVM¶ÑÄڴ棬JVM¶ÑÄÚ´æ´óСͨ³£ÓÐÏÞ¡£ ÍøÂçÈÝÒ׳öÏÖÎÊÌâµØ·½È磺Êý¾Ý¿âÁ¬½ÓûÓйرÕ(ÔÚÅ׳öÒì³£µÄÇé¿öÏ¡¢ÍøÂç¾­³£³öÏÖ¶¶¶¯Çé¿öÏÂ)¡£ Ò»¶Ë¹Ø±ÕÁíÒ»¶ËûÓйرյȡ£ÔËÐгÌÐò¼û²Î¿¼¸½¼þ:NetUsedHighTCPServer.java ºÍ NetUsedHighTCPClient.java

ͼ-27 ÏÔʾ rxpck/s(Total number of packets received per second.) txpck/s(Total number of packets transmitted per second.) rxkB/s(Total number of kilobytes received per second.) txkB/s(Total number of kilobytes transmitted per second.) ¶¼±È½Ï¸ß

ͼ-28

ͼ-29

ͼ-30

4.5³ÌÐòÖ´ÐÐÂýÔ­Òò·ÖÎö

ÓÐЩÇé¿öʱ×ÊÔ´ÏûºÄ²»¶à£¬µ«³ÌÐòÖ´ÐÐÈÔÈ»Âý£¬ÕâÖÖÏÖÏó¶à³öÏÖÓÚ·ÃÎÊÁ¿²»ÊǷdz£´óµÄÇé¿öÏ£¬Ôì³ÉÕâÖÖÏÖÏóµÄÔ­ÒòÖ÷ÒªÓÐÒÔÏÂÈýÖÖ£º

4.5.1. δ³ä·ÖʹÓÃÓ²¼þ×ÊÔ´

µ±Ç°Ö÷Á÷»úÆ÷CPU»ù±¾¶¼ÊÇ4»ò8ºË,Èç¹û³ÌÐòÖж¼Êǵ¥Ï̴߳®ÐеIJÙ×÷£¬²¢Ã»Óгä·Ö·¢»ÓÓ²¼þ×ÊÔ´µÄ×÷Óã¬ÄÇô¾Í¿É½øÐÐÒ»¶¨µÄÓÅ»¯(Èç:½«´®ÐÐÐÞ¸ÄΪ²¢·¢»ò²¢ÐеÄ)À´³ä·ÖʹÓÃÓ²¼þ×ÊÔ´£¬ÌáÉý³ÌÐòµÄÖ´ÐÐËÙ¶È¡£

Èç¹ûÔÚÒ»¶¨µÄ¸ºÔØÇé¿öÏ£¬¶àºËCPUʹÓÃÂʲ»¸ß£¬³ÌÐòÖ´ÐÐÂý(ͨ¹ý¼Ç¼ִÐеÄÕû¸ö¹ý³Ìʱ¼äÏûºÄ»òʹÓÃJProfilerµÈ¹¤¾ß)£¬ÕÒµ½Ö´ÐкÄʱ±ÈÀý×î´óµÄ´úÂë¡£

4.5.2. Ëø¾ºÕù¼¤ÁÒ

Ëø¾ºÕù¼¤ÁÒÖ±½Ó¾Í»áÔì³É³ÌÐòÖ´ÐÐÂý£¬ ÀýÈçÒ»¸öµäÐ͵ÄÀý×ÓÊÇÊý¾Ý¿âÁ¬½Ó³Ø(µ×²ãÒ²ÊÇÒ»¸öÍøÂçÁ¬½Ó³Ø)£¬Í¨³£Êý¾Ý¿âÁ¬½Ó³ØÌṩµÄÁ¬½ÓÊý¶¼ÊÇÓÐÏ޵ġ£¼ÙÉèÌṩµÄÊÇ10¸ö£¬ÄÇô¾ÍÒâζ×ÅͬʱÄܹ»½øÐÐÊý¾Ý¿â²Ù×÷µÄ¾ÍÖ»ÓÐ10¸öỊ̈߳¬¶øÈç¹û´ËʱÓÐ50¸öÏß³ÌÒª½øÐÐÊý¾Ý¿â²Ù×÷£¬ÄǾͻáÔì³ÉÁíÍâµÄ40¸öÏ̴߳¦Óڵȴý״̬£¬ÕâÖÖÇé¿ö϶ÔÓÚ8ºËÀàÐ͵ĻúÆ÷¶øÑÔ£¬CPUµÄÏûºÄ²¢²»»á¸ß£¬µ«³ÌÐòµÄÖ´ÐÐÈÔÈ»»á½ÏÂý¡£

4.5.3. Êý¾ÝÁ¿Ôö³¤

Êý¾ÝÁ¿Ôö³¤Í¨³£Ò²ÊÇÔì³É³ÌÐòÖ´ÐÐÂýµÄµäÐÍÔ­Òò£¬ÀýÈçµ±Êý¾Ý¿âÖе¥±íµÄÊý¾Ý´Ó100ÍòÌõ¼Ç¼ÉÏÕǵ½1¸öÒÚºó£¬Êý¾Ý¿âµÄ¶ÁдËٶȽ«´ó·ù¶ÈϽµ£¬ÏàÓ¦µÄ²Ù×÷´Ë±íµÄ³ÌÐòµÄÖ´ÐÐËÙ¶ÈÒ²¾ÍϽµÁË¡£

Èç¹ûÔÚÒ»¶¨µÄ¸ºÔØÇé¿öÏ£¬¶àºËCPUʹÓÃÂʲ»¸ß£¬³ÌÐòÖ´ÐÐÂý(ͨ¹ý¼Ç¼ִÐеÄÕû¸ö¹ý³ÌµÄʱ¼äÏûºÄ»òʹÓÃJProfilerµÈ¹¤¾ß)£¬ÕÒµ½Ö´ÐкÄʱ±ÈÀý×î´óµÄ´úÂë¡£

5 ÐÔÄܵ÷Õû(ÓÅ)

ÔÚѰÕÒµ½ÏµÍ³µÄÐÔÄÜÆ¿¾±ºó£¬½ÓÏÂÀ´µÄ²½Öè¾ÍÊǵ÷ÓÅ£¬ÒÔÌá¸ßϵͳÐÔÄÜ£¬ÏÁÒåµÄµ÷ÓÅͨ³£¿ÉÒÔ´ÓÓ²¼þ¡¢²Ù×÷ϵͳ¡¢JVMÒÔ¼°Ó¦ÓóÌÐòËĸö·½ÃæÈëÊÖ£¬Ó²¼þºÍ²Ù×÷ϵͳ·½ÃæµÄ֪ʶ²»ÊDZ¾ÎÄÕµÄÖØµã£¬ÏÂÃæ½áºÏÐÔÄÜÆ¿¾±µÄ·ÖÎö´ÓJVM¼°³ÌÐò·½ÃæÀ´½éÉÜһЩ³£Óõĵ÷ÓÅ·½·¨¡£

5.1 JVMµ÷ÓÅ

JVMµ÷ÓÅÖ÷ÒªÊÇÄÚ´æ¹ÜÀí·½ÃæµÄµ÷ÓŰüÀ¨ ¸÷¸ö´úµÄ´óС£¬GC²ßÂÔ µÈ¡£ÓÉÓÚGC¶¯×÷»á¹ÒÆðÓ¦ÓÃỊ̈߳¬ÑÏÖØÓ°ÏìÓ¦ÓóÌÐòµÄÐÔÄÜ£¬ÕâЩµ÷ÓŶÔÓÚÓ¦ÓóÌÐò¶øÑÔÖÁ¹ØÖØÒª£¬¸ù¾ÝÓ¦ÓóÌÐòµÄÇé¿öÑ¡Ôñ²»Í¬µÄÄÚ´æ¹ÜÀí²ßÂÔÓÐЩʱºòÄܹ»´ó·ù¶ÈµØÌáÉýÓ¦ÓóÌÐòµÄÐÔÄÜ£¬ÓÈÆäÊǶÔÓÚÄÚ´æÏûºÄ½Ï¶àµÄÓ¦Óá£ÏÂÃæ¾ÍÀ´¿´Ò»Ð©³£ÓõÄÄÚ´æ¹ÜÀíµ÷Óŵķ½·¨£¬ÕâЩ·½·¨¶¼ÊÇΪÁ˾¡Á¿½µµÍGCËùµ¼ÖµÄÓ¦ÓóÌÐòÔÝͣʱ¼ä¡£

5.1.1 ´ú´óСµÄµ÷ÓÅ

ÔÚ²»²ÉÓÃG1(G1²»Çø·Öminor GCºÍFull GC)µÄÇé¿öÏ£¬Í¨³£minor GC»áÔ¶¿ìÓÚFull GC, ¸÷¸ö´úµÄ´óСÉèÖÃÖ±½Ó¾ö¶¨ÁËminor GCºÍFull GC´¥·¢µÄʱ»ú£¬ÔÚ´ú´óСµÄµ÷ÓÅÉÏ£¬×î¹Ø¼üµÄ²ÎÊýΪ:-Xms -Xmx -Xmn -XX:SurvivorRatio -XX:MaxTenuringThreshold

-XmsºÍ-Xmxͨ³£ÉèÖÃΪÏàͬµÄÖµ£¬±ÜÃâÔËÐÐʱҪ²»¶ÏµØÀ©Õ¹JVMÄÚ´æ¿Õ¼ä£¬Õâ¸öÖµ¾ö¶¨ÁËJVM HeapËùÄÜʹÓõÄ×î´ó¿Õ¼ä¡£

-Xmn¾ö¶¨ÁËÐÂÉú´ú(New Generation)¿Õ¼äµÄ´óС£¬ÐÂÉú´úÖÐEden¡¢S0 ºÍ S1 Èý¸öÇøÓòµÄ±ÈÂÊ¿Éͨ¹ý-XX:SurvivorRatio À´¿ØÖÆ¡£

-XX:MaxTenuringThreshold ¿ØÖƶÔÏóÔÚ¾­Àú¶àÉÙ´ÎMinor GCºó²ÅתÈë¾ÉÉú´ú£¬Í¨³£ÓÖ½«´ËÖµ³ÆÎªÐÂÉú´ú´æ»îÖÜÆÚ£¬´Ë²ÎÊýÖ»ÓÐÔÚ´®ÐÐGCʱÓÐЧ£¬ÆäËûGC·½Ê½Ê±ÔòÓÉSun JDK×ÔÐоö¶¨¡£

½éÉÜMinor GC ºÍ Full GC´¥·¢µÄʱ»ú£¿£¿£¬ÔÚ´Ë´¦¾ÍÖ±½Ó¾ÙÀýÀ´¿´¿´²»Í¬µÄ´ú´óСÉèÖÃÇé¿öÏ£¬Ó¦ÓúķÑÔÚGCÉϵÄʱ¼ä£¬´ÓÖÐÒ²¿É¿´³öÔÚ²»Í¬µÄ³¡¾°Ï´ú´óСµ÷Óŵķ½·¨¡£

5.1.1.1. ±ÜÃâÐÂÉú´ú´óС ÉèÖùýС

µ±ÐÂÉú´ú´óСÉèÖùýСʱ»á²úÉúÁ½ÖֱȽÏÃ÷ÏÔµÄÏÖÏó: Ò»ÊÇminor GCµÄ´ÎÊý¸ü¼ÓƵ·±£»¶þÊÇÓпÉÄܵ¼ÖÂminor GC¶ÔÏóÖ±½Ó½øÈë¾Éʱ´ú£¬´ËʱÈç½øÈë¾ÉÉú´úµÄ¶ÔÏóÕ¼¾ÝÁ˾ÉÉú´úÊ£Óà¿Õ¼ä£¬Ôò´¥·¢Full GC.

ÔËÐÐʾÀý³ÌÐò(ʾÀý³ÌÐòGCDemo.javaÔڲο¼²¿·ÖÏÂÔØ)

Ê×ÏÈÒÔJVMÆô¶¯²ÎÊý£º-Xms135M -Xmx135M -Xmn10M -XX:+UseSerialGCÖ´ÐÐÉÏÃæµÄ´úÂ룬ͨ¹ýjstat¸ú×Ùµ½µÄGC×´¿öΪ£º

ͼ-31

Æä´Î£¬°´ÕÕÕâÑùµÄ˼·µ÷´óÐÂÉú´úµ½30MB,ÔòJVMÆô¶¯²ÎÊýΪ£º-Xms135M -Xmx135M -Xmn50M -XX:+UseSerialGCÖ´ÐÐÉÏÃæµÄ´úÂ룬ͨ¹ýjstat¸ú×Ùµ½µÄGC×´¿öΪ£º

ͼ-32

ͨ¹ý¶Ô±È·¢ÏÖ£¬µ±ÅäÖÃ-Xmn10MÓë-Xmn50M,GCTºÄ·ÑµÄʱ¼ä´Ó0.403Ãë½µµ½0.237Ãë¡£

³ýÁ˵÷´óÐÂÉú´ú´óСÍ⣬Èç¹ûÄܹ»µ÷´óJVM HeapµÄ´óС£¬Í¨³£Òâζ×ŵ¥´ÎGCʱ¼äµÄÔö¼Ó¡£

µ±minor GC¹ýÓÚÆµ·±£¬»ò·¢ÏÖ¾­³£³öÏÖminor GCʱ£¬SurvivorµÄÒ»¸öÇøÓò¿Õ¼äÂú£¬ÇÒOld GenÔö³¤³¬¹ýÁËSurvivorÇøÓò´óСʱ£¬¾ÍÐèÒª¿¼ÂÇÐÂÉú´ú´óСµÄµ÷ÕûÁË¡£µ÷ÕûʱµÄÔ­ÔòÊÇÔÚ²»Äܵ÷´óJVM HeapµÄÇé¿öÏ£¬¾¡¿ÉÄÜ·Å´óÐÂÉú´ú¿Õ¼ä£¬¾¡Á¿ÈöÔÏóÔÚminorGC½×¶Î±»»ØÊÕ£¬µ«ÐÂÉú´ú¿Õ¼äÒ²²»¿É¹ý´ó£»ÔÚÄܹ»µ÷´óJVM HeapµÄÇé¿öÏ£¬Ôò¿ÉÒÔ°´ÕÕÔö¼ÓµÄÐÂÉú´ú¿Õ¼ä´óСÔö¼ÓJVM Heap´óС£¬ÒÔ±£Ö¤¾ÉÉú´ú¿Õ¼ä¹»Óá£

5.1.1.2. ±ÜÃâÐÂÉú´ú´óС ÉèÖùý´ó

ÐÂÉú´úÉèÖùý´ó»á´øÀ´Á½¸öµäÐ͵ÄÏÖÏó£¬Ò»ÊǾÉÉú´ú±äСÁË£¬ÓпÉÄܵ¼ÖÂFull GCƵ·±Ö´ÐУ» ¶þÊÇminor GCµÄºÄʱ´ó·ù¶ÈÔö¼Ó¡£

ÈÔÈ»ÓÃÉÏÃæµÄÀý×Ó Ê×ÏÈÒÔJVMÆô¶¯²ÎÊý£º-Xms135M -Xmx135M -Xmn105M -XX:+UseSerialGCÖ´ÐÐÉÏÃæµÄ´úÂ룬ͨ¹ýjstat¸ú×Ùµ½µÄGC×´¿öΪ£º

Ê×ÏÈÒÔJVMÆô¶¯²ÎÊý£º-Xms135M -Xmx135M -Xmn105M -XX:+UseSerialGC Ö´ÐÐÉÏÃæµÄ´úÂ룬ͨ¹ýjstat¸ú×Ùµ½µÄGC×´¿öΪ£º

ͼ-33

Æä´ÎÒÔJVMÆô¶¯²ÎÊý£º-Xms135M -Xmx135M -Xmn25M -XX:+UseSerialGC Ö´ÐÐÉÏÃæµÄ´úÂ룬ͨ¹ýjstat¸ú×Ùµ½µÄGC×´¿öΪ£º

ͼ-34

´ÓÕâ¸öµ÷ÕûºÍ֮ǰ°ÑÐÂÉú´úµ÷Ϊ25MBʱ¶Ô±È£¬´Ëʱminor GCϽµÁË£¬µ«Full GCÈÔÈ»¶àÁËÒ»´Î¡£Ô­ÒòÔÚÓÚ£¬µ±µÚ¶þ´Îµ½´ïminor GCµÄ´¥·¢Ìõ¼þʱ£¬JVM»ùÓÚ±¯¹ÛÔ­Ôò£¬ÅжÏĿǰoldÇøµÄÊ£Óà¿Õ¼äСÓÚ¿ÉÄÜ»á´ÓÐÂÉú´ú½úÉýµ½oldÇøµÄ¶ÔÏóµÄ´óС£¬ÓÚÊÇÖ´ÐÐÁËFull GC,´Ó¶øminor GCÏûºÄµÄʱ¼äÀ´¿´£¬µ¥´Êminor GCµÄʱ¼äÒ²±ÈÒÔǰÂýÁ˲»ÉÙ¡£

´ÓÉÏÃæµÄ·ÖÎöÀ´¿´£¬¿É¼ûÐÂÉú´úͨ³£²»ÄÜÉèÖõùý´ó£¬´ó¶àÊý³¡¾°Ï¶¼Ó¦ÉèÖõıȾÉÉú´úС£¬Í¨³£ÍƼöµÄ±ÈÀýÊÇÐÂÉú´úÕ¼JVM HeapÇø´óСµÄ33%×óÓÒ¡£

5.1.1.3. ±ÜÃâSurvivorÇøÉèÖùýС»ò¹ý´ó

ÔÚ²ÉÓô®ÐÐGCʱ£¬Ä¬ÈÏÇé¿öÏÂEden¡¢S0¡¢s1µÄ´óС±ÈÀýΪ 8:1,µ÷ÕûΪÒÔϲÎÊýÖ´ÐÐÉÏÃæµÄʾÀý´úÂ룺

java -Xms135M -Xmx135M -Xmn20M -XX:SurvivorRatio=10 -XX:+UseSerialGC -jar GCDemo.jar ,ͨ¹ýjstat -gc [pid] 1000 50 ¹Û²ìµ½ÆäGC×´¿öΪ£º

ͼ-35

´ÓÉÏÃæµÄ·ÖÎöÀ´¿´£¬ÔÚÎÞ·¨µ÷ÕûJVM HeapÒÔ¼°ÐÂÉú´úµÄ´óСʱ£¬ºÏÀíµ÷ÕûSurvivorÇøµÄ´óСҲÄÜ´øÀ´Ò»Ð©Ð§¹û¡£

µ±µ÷´óSurvivorRatioÖµÒâζ×ÅEdenÇøÓò±ä´ó£¬minor GCµÄ´¥·¢´ÎÊý»á½µµÍ£¬µ«´ËʱSurvivorÇøÓòµÄ¿Õ¼ä±äСÁË£¬ÈçÓг¬¹ýSurvivor¿Õ¼ä´óСµÄ¶ÔÏóÔÚminor GCºóÈÔûÓб»»ØÊÕ£¬Ôò»áÖ±½Ó½øÈë¾ÉÉú´ú£»

µ±µ÷СSurvivorRatioÔòÒâζ×ÅEdenÇøÓò±äС£¬minor GCµÄ´¥·¢´ÎÊý»áÔö¼Ó£¬SurvivorÇøÓò±ä´ó£¬Òâζ×Å¿ÉÒÔ´æ´¢¸ü¶àÔÚminor GCºóÈÔ´æ»îµÄ¶ÔÏ󣬱ÜÃâÆä½øÈë¾ÉÉú´ú¡£

5.1.1. 4. ºÏÀíÉèÖÃÐÂÉú´ú´æ»îÖÜÆÚ

ÐÂÉú´ú´æ»îÖÜÆÚµÄÖµ¾ö¶¨ÁËÐÂÉú´úµÄ¶ÔÏó¾­¹ý¶àÉÙ´ÎMinor GCºó½øÈë¾ÉÉú´ú£¬Òò´ËÕâ¸öÖµÒ²ÐèÒª¸ù¾ÝÓ¦ÓõÄ×´¿öÀ´×öÕë¶ÔÐԵĵ÷ÓÅ£¬JVM²ÎÊýÉÏÕâ¸öÖµ¶ÔÓ¦µÄΪ-XX:MaxTenuringThreshold£¬Ä¬ÈÏֵΪ15´Î£¬ ÏÂÃæÍ¨¹ýÉèÖòÎÊýµÄÀý×Ó(²Î¿¼²¿·Ö¸½¼þ)¿´Ò»Ï£º

Ê×ÏÈ -Xms150M -Xmx150M -Xmn20M -XX:+UseSerialGCÖ´ÐдúÂ룬ִÐнá¹ûÈçÏÂ

ͼ-36

Æä´Î -Xms150M -Xmx150M -Xmn20M -XX:+UseSerialGC -XX:MaxTenuringThreshold=20 Ö´ÐдúÂ룬ִÐнá¹ûÈçÏ£º

ͼ-37

´ÓÉÏÃæµÄµ÷Õû½á¹û¿É¼û£¬ÔÚÔö´óÁË´æ»îÖÜÆÚºó£¬¶ÔÏóÔÚMinor GC½×¶Î±»»ØÊյĻú»á¾ÍÔö¼ÓÁË£¬µ«Í¬Ê±´øÀ´µÄÊÇsurvivorÇø±»Õ¼Ó㬵«´ËÖµ½öÔÚ´®ÐÐGCºÍParNew GCʱ¿Éµ÷Õû¡£

×ܽáÉÏÃæµÄ¼¸¸öÀý×ÓÀ´¿´£¬¶ÔÓÚ´ú´óСµÄµ÷ÓÅ£¬Ö÷ÒªÊǺÏÀíµ÷Õû -Xms¡¢-Xmx¡¢-Xmn ÒÔ¼° -XX:SurvivorRatioµÄÖµ£¬¾¡¿ÉÄܼõÉÙGCËùÕ¼ÓõÄʱ¼ä¡£

-Xms¡¢-XmxÊÊÓÃÓÚµ÷ÕûÕû¸öJVM HeapÇø´óС£¬ÔÚÄÚ´æ²»¹»ÓõÄÇé¿öÏ¿ÉÊʵ±¼Ó´ó´ËÖµ£¬Õâ¸öÖµÄܵ÷Õûµ½¶à´ó È¡¾öÓÚ²Ù×÷ϵͳλÊý ÒÔ¼° CPUµÄÄÜÁ¦¡£

-Xmn ÊÊÓÃÓÚµ÷ÕûÐÂÉú´úµÄ´óС¡¢ÐÂÉú´úµÄ´óС¾ö¶¨Á˶àÉÙ±ÈÀýµÄ¶ÔÏóÓлú»áÔÙminor GC½×¶Î±»»ØÊÕ£¬µ«´ËÖµÏàÓ¦µÄÒ²¾ö¶¨Á˾ÉÉú´úµÄ´óС¡£ÐÂÉú´úÔ½´ó£¬Í¨³£Òâζ×ŶàÊý¶ÔÏóÄܹ»ÔÚminor GC½×¶Î±»»ØÊÕµô£¬µ«Í¬Ê±ÒâζמÉÉú´úµÄ¿Õ¼ä»á±äС£¬¿ÉÄÜ»áÔì³É¸üƵ·±µÄFull GC£¬ÉõÖÁÊÇOutOfMemoryError.

-XX:SurvivorRatio ÊÊÓÃÓÚµ÷ÕûEdenÇøºÍSurvivorÇøµÄ´óС£¬EdenÇøÔ½´óͨ³£Ò²¾ÍÒâζ×Åminor GC·¢ÉúµÄƵÂÊÔ½µÍ¡£µ«ÓпÉÄÜ»áÔì³ÉSurvivorÇøÌ«Ð¡£¬µ¼Ö¶ÔÏóÔÚ¾­¹ýminorºóÖ±½Ó¾Í½øÈë¾ÉÉú´úÁË£¬´Ó¶ø¸üƵ·±µÄ´¥·¢Full GC, ÕâÈ¡¾öÓÚµ±EdenÇøÂúµÄʱºòÆäÖдæ»î¶ÔÏóµÄ±ÈÀý¡£

ÔÚÇå³þÕÆÎÕminor GC¡¢Full GCµÄ´¥·¢Ê±»úÒÔ¼°´ú´óСµÄµ÷Õûºó£¬½áºÏÓ¦ÓõÄ×´¿ö(ÀýÈç´´½¨³öµÄ¶ÔÏ󶼿ɺܿ챻»ØÊÕµô¡¢»º´æ¶ÔÏó¶àµÈ)ͨ³£¾Í¿É½ÏºÃÉèÖôúµÄ´óС£¬¼õÉÙGCËøÕ¼ÓõÄʱ¼ä¡£ÔÚµ÷Õûºó¿É½áºÏjstat¡¢VisualVMµÈ²é¿´GCµÄ±ä»¯ÊÇ·ñ´ïµ½Á˵÷ÓŵÄÄ¿µÄ¡£

5.1.2 GC²ßÂԵĵ÷ÓÅ

Sun JDKËùÌṩµÄ¼¸ÖÖGC²ßÂÔ£¬´®ÐÐGCÐÔÄÜÌ«²î£¬Òò´ËÔÚʵ¼Ê³¡¾°ÖÐʹÓõÄÖ÷ҪΪ²¢ÐкͲ¢·¢GC,

ͨ¹ýÏÂÃæÕâ¸öÀý×Ó´¥·¢¶à´ÎGC,²é¿´²¢ÐÐGCÒÔ¼°²¢·¢GCʱ¶ÔÓÚÓ¦ÓÃÔì³ÉµÄ²»Í¬µÄÔÝͣʱ¼ä¡£

Ê×ÏÈÒÔVM Args: -Xms680M -Xmx680M -Xmn80M -XX:+UseConcMarkSweepGC -XX:+PrintGCApplicationStoppedTime -XX:+UseCMSCompactAtFullCollection -XX:CMSMaxAbortablePrecleanTime=5 ²ÎÊýÖ´ÐУ¬Í¨¹ýjstat¹Û²ìµ½µÄGC×´¿ö£º

ͼ-38

Æä´ÎÒÔVM Args: -Xms680M -Xmx680M -Xmn80M -XX:+PrintGCApplicationStoppedTime -XX:+UseParallelGC ²ÎÊýÖ´ÐУ¬Í¨¹ýjstat¹Û²ìµ½µÄGC×´¿ö£º

ͼ-39

´ó²¿·Ö´ó²¿·Ö WebÓ¦ÓÃÔÚ´¦ÀíÇëÇóʱÉèÖÃÁËÒ»¸ö×î´ó¿Éͬʱ´¦ÀíµÄÇëÇóÊý£¬µ±³¬¹ý´ÎÇëÇóÊýʱ£¬»á½«Ö®ºóµÄÇëÇó·ÅÈëµÈ´ý¶ÓÁÐÖУ¬¶øÕâ¸öµÈ´ý¶ÓÁÐÒ²ÏÞÖÆÁË´óС¡£µ±µÈ´ý¶ÓÁÐÂýÁËÒÔºóÈÔÈ»ÓÐÇëÇó½øÈ룬ÄÇôÕâЩÇëÇ󽫻áÖ±½Ó±»¶ªÆú£¬ËùÓеÄÇëÇóÓÖ¶¼ÊÇÓг¬Ê±ÏÞÖÆµÄ¡£ÔÚÕâÖÖÇé¿öÏÂÈç´¥·¢ÁËÔì³ÉÓ¦ÓÃÔÝͣʱ¼ä½Ï³¤µÄFull GC,ÄÇôÓпÉÄÜÔÚÕâ´ÎFull GCºó£¬Ôì³ÉÁË3ÃëµÄÔÝÍ££¬ÄÇô֮ǰÔÚ´ËÓ¦ÓÃÉϵȴý´¦ÀíµÄÇëÇó¾Í»áÈ«²¿³¬Ê±ÁË¡£´ÓÉϿɿ´³ö£¬WebÓ¦Ó÷dz£ÐèÒªÒ»¸ö¶ÔÓ¦ÓÃÔì³ÉÔÝͣʱ¼ä¶ÌµÄGC,ÔÙ¼ÓÉϴ󲿷ÖWebÓ¦ÓÃµÄÆ¿¾±¶¼²»ÔÚCPUÉÏ¡£Òò´Ë¶ÔÓÚWebÓ¦ÓöøÑÔ£¬ÔÚG1»¹²»¹»³ÉÊìµÄÇé¿öÏ£¬CMS GCÊDz»´íµÄÑ¡Ôñ¡£

5.1.3 JVMµ÷Ó۸Àý

ÒÔÏÂΪһ¸öϵͳһ¶Îʱ¼äÄÚµÄGC×´¿ö£¬´ËϵͳÔËÐеĻúÆ÷²Ù×÷ϵͳΪ32Ϊ£¬CPUΪ4ºË£¬ÎïÀíÄÚ´æÎª4G,Æô¶¯²ÎÊýΪ£º

VM args: -server -Xms1536m -Xmx1536m -Xmn700m -XX:PermSize=96m -XX:MaxPermSize=96m

¸ù¾ÝÆô¶¯µÄ²ÎÊýÒÔ¼°»úÆ÷ÅäÖÃÀ´¿´£¬Ä¿Ç°ÏµÍ³ÐÂÉú´úGCµÄÀàÐÍΪParallel Scavenge,Æô¶¯Ê±Eden Space,S0,S1½«»áÓÉHotSpot×Ô¶¯µ÷Õû£¬´óÖ¿ռä´óС£ºEden561¡¢59ºÍ72ÕâÑùµÄ·ÖÅäÇé¿ö£¬¼ÙÉè¶àÊýÇé¿öϾùΪÕâÑùµÄÕ¼±È£¬Ä¿Ç°µÄÔËÐÐ×´¿öΪÿ´ÎMinor GCºó´ó¸ÅÓÐ16MB¶ÔÏó½øÈë¾ÉÉú´ú£¬¼ÙÉèÕâЩ¶ÔÏó¶¼ÊÇÒòΪ³¬¹ýSurvivor Space²Å½øÈë¾ÉÉú´úµÄ£¬ÄÇô¿ÉÒÔÈÏΪÿ´ÎMinor GCʱÓÐ16+72=88MBµÄ¶ÔÏóʱ´æ»îµÄ£¬´ÓĿǰFull GCµÄ×´¿öÀ´¿´£¬ÆäʵÕâ88MBµÄ¶ÔÏóÔÚÒ»¶Îʱ¼äºó¶¼ÊÇ¿ÉÒÔ»ØÊյģ¬ÄÇôÀíÂÛÉÏÀ´ËµÖ»Óý«Survivor SpaceÀ©´óµ½88MBÒÔÉϼ´¿É£¬°´×ÅÕâ¸öÏë·¨£¬¿ÉÒÔ½«Æô¶¯²ÎÊýµ÷ÕûΪ£º

VM args: -server -Xms1536m -Xmx1536m -Xmn700m -XX:PermSize=96m -XX:MaxPermSize=96m -XX:InitialSurvivorRatio=7 -XX:-UseAdaptiveSizePolicy

³ýÁËÒÔÉÏ·½·¨Í⣬»¹¿É²ÉÓõÄÁíÒ»·½Ê½Îª½«GC²âÁ¿µ÷ÕûΪCMS GC,²ÎÊýÈçÏ£º

VM args: -server -Xms1536m -Xmx1536m -Xmn700m -XX:PermSize=96m -XX:MaxPermSize=96m

-XX:+UseConcMarkSweepGC -XX:+UseCompactAtFullCollection

-XX:CMSMaxAbortablePrecleanTime=500 -XX:+CMSPermGenSweepingEnabled

-XX:+CMSClassUnloadingEnabled

ÔÚ×öÍêÒÔÉϵĵ÷Óź󣬶¼ÐèÒª¼ÌÐø½áºÏjstat¹¤¾ßÀ´²é¿´ÊÇ·ñ´ïµ½Á˵÷ÓŵÄÄ¿±ê£¬Èç¹ûûÓÐÔòÐèÒª¼ÌÐø°´×ÅÒÔÉϲ½Öè½øÐвÎÊýµÄµ÷Õû¡£¾ßÌå²ÎÊýÁбí¿ÉÒԲο¼Oracle¹Ù·½

ÔÚ½øÐвÎÊýµ÷Õûʱ£¬¿É¸ù¾ÝĿǰÊÕ¼¯µ½µÄ¶¥·åʱϵͳÇëÇó´ÎÊý¡¢ÏìӦʱ¼äÒÔ¼°GCµÄÐÅÏ¢£¬À´¹À¼ÆÏµÍ³Ã¿´ÎÇëÇóÐèÒªÏûºÄµÄÄڴ棬ÒÔ¼°Ã¿´ÎMinor GCʱ´æ»îµÄ¶ÔÏóËùÕ¼µÄÄڴ棬´Ó¶ø¹À¼ÆÐèÒªÉèÖöà´óµÄSurvivor²ÅÄܹ»¾¡¿ÉÄܵرÜÃâ¶ÔÏó½øÈë¾ÉÉú´ú¡£

ÀýÈ磺ÿÃëµÄÇëÇóΪ60´Î£¬GCÐÅÏ¢ÏÔʾÿ10ÃëÖ´ÐÐÒ»´Îminor GC,ÿ´ÎMinor GC»áÓÐ10MB¶ÔÏóתÈë¾ÉÉú´ú£¬Ã¿´ÎMinor GCÔÚEden·ÖÅäµÄÄÚ´æÎª600MB,SurvivorΪ100MB.¸ù¾ÝÕâЩÐÅÏ¢£¬¿ÉÒÔ¼òµ¥ÈÏΪϵͳÖÐÿ´ÎÇëÇóÏûºÄµÄÄÚ´æ´óÖÂΪ1MB, ²¢´ÖÂÔ¹À¼ÆÎªÔÚ¿ªÊ¼Minor GCʱ£¬»¹ÓÐ110¸öÇëÇóδ´¦ÀíÍê¡£ ¶ÔÓÚÕâÑùµÄ×´¿ö£¬¼òµ¥µÄµ÷ÓÅ·½Ê½¿ÉÒÔÔÚ±£³ÖEden Space 600 MBµÄÇé¿öÏ£¬ ½«Survivor SpaceÔö³¤µ½120MB,ÄǾͻù±¾¿ÉÒÔ×öµ½ÔÚµ±Ç°µÄÏìÓ¦ËÙ¶ÈÏ£¬Èç10ÃëÄÚ½ÓÊܵÄÇëÇó×î¶àΪ600¸öʱ£¬Minor GCʱ´ó²¿·ÖÇé¿ö²»»áÓжÔÏóתÈë¾ÉÉú´ú£¬µ«±Ï¾¹ÏµÍ³ÖеÄÇëÇóÏìӦʱ¼ä¡¢ÄÚ´æÏûºÄ·Ö²¼²»»áÕâôƽ¾ù£¬²¢ÇÒ»¹»Ø³öÏÖÖ±½ÓÔÚ¾ÉÉú´ú·ÖÅäµÄÏÖÏó£¬Òò´Ëͨ³£°´ÕâÑù´ÖÂԵĹÀ¼ÆÉèÖõIJÎÊýÈÔÈ»»á´ï²»µ½Ä¿±ê£¬Òª¼ÌÐø½øÐÐһЩϸ΢µÄµ÷½ÚÀ´Ö𲽴ﵽĿ±ê¡£

ÓÉÓÚ²ÎÊýµÄ¹À¼ÆÊÇÒÔÇëÇó´ÎÊýºÍÏìӦʱ¼äΪ»ù×¼µÄ£¬Òò´ËÒ»µ©ÏµÍ³µÄÏìÓ¦ËÙ¶ÈϽµ»òÇëÇóµÄ´ÎÊýÉÏÉý£¬¾Í¿ÉÄÜÈÔÈ»»áµ¼Ö´óÁ¿¶ÔÏó½øÈë¾ÉÉú´ú£¬´Ó¶ø´¥·¢Æµ·±µÄFull GC,Ƶ·±µÄFull GCÓÖµ¼ÖÂϵͳµÄÏìÓ¦ËÙ¶ÈϽµ£¬´ÓÕâ¸ö²ãÃæÀ´¿´£¬¸ù±¾ÉÏÐèÒª×öµÄµ÷ÓÅÈÔÈ»ÊÇÌáÉýÇëÇóµÄ´¦ÀíËÙ¶ÈÒÔ¼°½µµÍÿ´ÎÇëÇóÐèÒª·ÖÅäµÄÄڴ棬ֻÓÐÕâÑù²ÅÄÜʹµÄÓ¦ÓÃÄܹ»Ö§³Å¸ü¸ßµÄ²¢·¢Á¿£¬·ñÔò¾Í»áËæ×Ų¢·¢Á¿µÄÉÏÕǶøÑ¸ËÙ³öÏÖÆ¿¾±¡£

¾ÉÉú´ú´óСµÄµ÷ÕûÒ»·½ÃæÒªÒÀ¾ÝÐÂÉú´úµÄ´óС£¬ÁíÒ»·½ÃæÒªÒÀ¾ÝϵͳÖг־ôæ»îµÄ¶ÔÏó»áÏûºÄ¶à´óµÄÄÚ´æÀ´¾ö¶¨¡£

Èçϵͳ²»ÊÇCPUÃܼ¯ÐÍ£¬ÇÒ´ÓÐÂÉú´ú½øÈë¾ÉÉú´úµÄ´ó²¿·Ö¶ÔÏóʱ¿É»ØÊյģ¬ÄÇô²ÉÓÃCMS GC¿ÉÒÔ¸üºÃµØÔÚ¾ÉÉú´úÂú֮ǰÍê³É¶ÔÏóµÄ»ØÊÕ£¬¸ü´ó³Ì¶È½µµÍÁËFull GC·¢ÉúµÄ¿ÉÄÜ¡£

ĿǰÄÚ´æ¹ÜÀí·½Ãæ£¬JVM×ÔÉíÒѾ­×öµÃ·Ç³£²»´íÁË£¬Òò´ËÈç¹û²»ÊÇÓÐÈ·ÇеÄGCÔì³ÉÐÔÄܵ͵ÄÀíÓÉ£¬¾ÍûÓбØÒª×ö¹ý¶àµÄϸ½Ú·½ÃæµÄµ÷ÓÅ(ÀýÈ磺survivorÇø´óСµÄÉèÖõÈ)¡£¶àÊýÇé¿öÏÂÖ»ÐëÑ¡ÔñGC²ßÂÔ²¢ÉèÖÃJVM HeapµÄ´óС¼´¿É¡£ÔÚµ÷ÕûÁËÄÚ´æ¹ÜÀí·½ÃæµÄ²ÎÊýºóӦͨ¹ý-XX:+PrintGCDetails¡¢-XX:+PrintGCTimeStamps¡¢-XX:+PrintGCApplicationStoppedTime ¼°jstat »ò visualvmµÈ·½Ê½À´¹Û²ìµ÷ÕûºóGCµÄ×´¿ö£¬³ýÄÚ´æ¹ÜÀí·½ÃæµÄµ÷ÓÅÍ⣬Sun JDK»¹ÌṩÁËһЩÆäËû·½ÃæµÄµ÷ÓŲÎÊý£º

È磺-XX:CompileThreshold¡¢ -XX:+UseFastAccessorMethods ¼° -XX:+UseBiasedLockingµÈ¡£

»ù±¾ÉÏJVMµ÷ÓÅ£¬¶àÊýÇëÏÂÖ»ÐèҪѡÔñGC²ßÂÔ(´®ÐС¢²¢ÐС¢²¢·¢¡¢G1)²¢ÉèÖÃJVM HeapµÄ´óС¼´¿É¡£ÔÚµ÷ÕûÁËÄÚ´æ¹ÜÀí·½ÃæµÄ²ÎÊýӦͨ¹ý-XX:+PrintGCDetails¡¢-XX:+PrintGCTimeStamps¡¢-XX:+PrintGCApplicationStoppedTime¼°jstat »ò visualvmµÈ·½Ê½À´¹Û²ìµ÷ÕûºóGCµÄÇé¿ö£¬³ýÁËÄÚ´æ¹ÜÀí·½ÃæµÄµ÷ÓÅÍ⣬ Sun JDK»¹ÌṩÁËһЩÆäËû·½ÃæµÄµ÷ÓŲÎÊý£ºÈç-XX:CompileThreshold¡¢-XX:+UseFastAccessorMethods ¼°-XX:+UseBiasedLockingµÈ¡£

³ýÁËÒÔÉÏ»ùÓÚ¶ÔJDKʵÏÖ¼°JDKµ÷ÓŲÎÊýµÄÕÆÎÕ½øÐеĵ÷ÓÅÍ⣬¹Ø×¢JDKµÄа汾ҲÊDz»´íµÄÑ¡Ôñ¡£Ã¿´ÎJDKа汾µÄ·¢²¼¼¸ºõ¶¼»áÔÚÐÔÄÜÉÏ×ö³öһЩÓÅ»¯£¬Ò²ÐíÕâЩÓÅ»¯ÕýÊÇÓ¦ÓÃËùÐèÒªµÄ¶î¡£

5.2 ³ÌÐòµ÷ÓÅ

5.2.1 CPUÏûºÄÑÏÖØµÄ½â¾ö·½·¨

5.2.1.1. CPU us¸ßµÄ½â¾ö·½·¨

¸ù¾Ý֮ǰµÄ·ÖÎö£¬CPU us¸ßµÄÔ­ÒòÖ÷ÒªÊÇÖ´ÐÐÏß³ÌÎÞÈÎºÎ¹ÒÆð¶¯×÷£¬ÇÒÒ»Ö±Ö´ÐУ¬µ¼ÖÂCPUûÓлú»áÈ¥µ÷¶ÈÖ´ÐÐÆäËûµÄỊ̈߳¬Ôì³ÉÏ̶߳öËÀµÄÏÖÏó¡£¶ÔÓÚÕâÖÖÇé¿ö£¬³£¼ûµÄÒ»ÖÖÓÅ»¯·½·¨ÊǶÔÕâÖÖÏ̵߳͝×÷Ôö¼ÓThread.sleep(),ÒÔÊÍ·ÅCPUµÄÖ´ÐÐȨ£¬½µµÍCPUµÄÏûºÄ¡£½â¾öʾÀý£ºUsHighOfCpuSolveDemo.java

°´ÕÕÕâÑùµÄ˼·£¬¶Ô"CPUÏûºÄ·ÖÎö"ÖеÄÀý×Ó½øÐÐÐ޸ģ¬ÔÚÍù¼¯ºÏÖÐÔö¼ÓÔªËØµÄ²¿·ÖÔö¼Ósleep,ÐÞ¸ÄÈçÏ´úÂ룺

ͼ-40

ÖØÐÂÖ´ÐÐÒÔÉÏ´úÂ룬ͨ¹ýtop²é¿´Ð§¹ûÈçͼִÐÐЧ¹û£º

ͼ-41

´ÓÉϽá¹û¿É¼û£¬CPUµÄÏûºÄ´ó·ù¶ÈϽµ£¬µ±È»£¬ÕâÖÖÐ޸ķ½Ê½ÊÇÒÔËðʧµ¥´ÎÖ´ÐÐÐÔÄÜΪ´ú¼ÛµÄ£¬µ«ÓÉÓÚ½µµÍÁËCPUµÄÏûºÄ£¬¶ÔÓÚ¶àÏ̵߳ÄÓ¦ÓöøÑÔ£¬·´¶øÌá¸ßÁË×ÜÌåµÄƽ¾ùÐÔÄÜ¡£

ÔÚʵ¼ÊµÄJavaÓ¦ÓÃÖлáÓкܶàÀàËÆµÄ³¡¾°£¬ÀýÈç¶àÏ̵߳ÄÈÎÎñÖ´ÐйÜÀíÆ÷£¬Ëüͨ³£ÒªÍ¨¹ýɨÃèÈÎÎñ¼¯ºÏÁбíÀ´Ö´ÐÐÈÎÎñ¡£¶ÔÓÚÕâЩÀàËÆ³¡¾°£¬¶¼¿Éͨ¹ýÔö¼ÓÒ»¶¨µÄsleepʱ¼äÀ´±ÜÃâÏûºÄ¹ý¶àµÄCPU.

¶ÔÓÚÆäËûÀàËÆÑ­»·´ÎÊýÌ«¶à¡¢ÕýÔò¡¢¼ÆËãµÈÔì³ÉµÄCPU us¹ý¸ßµÄÇé¿ö£¬ÔòÒª½áºÏÒµÎñÐèÇóÀ´½øÐе÷ÓÅ¡£

¶ÔÓÚGCƵ·±Ôì³ÉµÄCPU us¸ßµÄÏÖÏó£¬ÔòҪͨ¹ýJVMµ÷ÓÅ»ò³ÌÐòµ÷ÓÅ£¬½µµÍGCµÄÖ´ÐдÎÊý¡£

5.2.1 2. CPU sy¸ßµÄ½â¾ö·½·¨

5.2.1.2.1 ¼õÉÙÏß³ÌÊý

CPU sy¸ßµÄÔ­ÒòÖ÷ÒªÊÇÏ̵߳ÄÔËÐÐ״̬Ҫ¾­³£Çл»£¬¶ÔÓÚÕâÖÖÇé¿ö£¬×î¼òµ¥µÄÓÅ»¯·½·¨ÊǼõÉÙÏß³ÌÊý¡£

¿É¼û¼õÉÙÏß³ÌÊýʱÄÜÈÃsyֵϽµµÄ£¬ËùÒÔ²»ÊÇÏß³ÌÊýÔ½¶àÍÌÍÂÁ¿¾ÍÔ½¸ß£¬Ïß³ÌÊýÐèÒªÉèÖÃΪºÏÀíµÄÖµ£¬ÕâÐèÒª¸ù¾ÝÓ¦ÓÃÇé¿öÀ´¾ßÌå¾ö¶¨£¬Í¬Ê±Ê¹ÓÃÏ̳߳رÜÃâÒª²»¶ÏµØ´´½¨Ï̡߳£ÈçÓ¦ÓÃÒªÖ§³Å´óÁ¿µÄ²¢·¢£¬ÔÚ¼õÉÙÏß³ÌÊýµÄÇé¿öÏÂ×îºÃÊÇÔö¼ÓÒ»¸ö»º³å¶ÓÁУ¬±ÜÃâÒòΪÏß³ÌÊýµÄ¼õÉÙÔì³Éϵͳ³ö´íÂÊÉÏÉý¡£

Ôì³ÉCPU sy¸ßµÄÔ­Òò³ýÁËÆô¶¯µÄÏ̹߳ý¶àÒÔÍ⣬»¹ÓÐÒ»¸öÖØÒªµÄÔ­ÒòÊdzÌÐòÖ®¼äËø¾ºÕù¼¤ÁÒ£¬Ôì³ÉÁËÏß³Ì״̬¾­³£ÒªÇл»£¬Òò´Ë¾¡¿ÉÄܽµµÍÏ̼߳äµÄËø¾ºÕùÒ²Êdz£¼ûµÄÓÅ»¯·½·¨¡£Ëø¾ºÕù½µµÍºó£¬Ï̵߳Ä״̬Çл»µÄ´ÎÊýÒ²¾Í»áϽµ£¬syÖµ»ØÏàӦϽµ¡£µ«ÖµµÄ×¢ÒâµÄÊÇÈËÏß³ÌÊý¹ý¶à£¬µ÷ÓźóÓпÉÄÜ»áÔì³ÉusÖµ¹ý¸ß£¬ËùÒÔºÏÀíµØÉèÖÃÏß³ÌÊý·Ç³£¹Ø¼ü¡£Ëø¾ºÕù¸üÓпÉÄÜÔì³Éϵͳ×ÊÔ´ÏûºÄ²»¶à£¬µ«ÏµÍ³ÐÔÄܲ»×ãµÄÏÖÏó¡£

5.1.2.2.2 Coroutine(Э³Ì)

³ýÁËÒÔÉÏÁ½ÖÖÇé¿öÍ⣬¶ÔÓÚ·Ö²¼Ê½JavaÓ¦ÓöøÑÔ£¬»¹ÓÐÒ»ÖÖµäÐÍÏÖÏóÊÇÓ¦ÓÃÖÐÓн϶àµÄÍøÂçIO²Ù×÷»òȷʵÐèÒªÒ»Ð©Ëø¾ºÕù»úÖÆ(ÀýÈçÊý¾Ý¿âÁ¬½Ó³Ø)£¬µ«ÎªÁËÄܹ»Ö§³Ö¸ßµÄ²¢·¢Á¿£¬ÔÚJavaÓ¦ÓÃÖÐÓÐÖ»ÄܽèÖúÆô¶¯¸ü¶àµÄÏß³ÌÀ´Ö§³Å¡£ÔÚÕâÑùµÄÇé¿öϵ±²¢·¢Á¿Ôö³¤µ½Ò»¶¨³Ì¶Èºó£¬¿ÉÄÜ»áÔì³ÉCPU sy¸ßµÄỊ̈߳¬¶ÔÓÚÕâÖÖÏÖÏ󣬿ɲÉÓÃЭ³Ì(Coroutine)À´Ö§³Å¸ü¸ßµÄ²¢·¢Á¿£¬±ÜÃâ²¢·¢Á¿ÉÏÕǺóÔì³ÉCPU syÏûºÄÑÏÖØ¡¢ÏµÍ³loadѸËÙÉÏÕǺÍϵͳÐÔÄÜϽµ¡£

²ÉÓÃЭ³Ìºó£¬ÄÜ×öµ½µ±Ï̵߳ȴýÊý¾Ý¿âÖ´Ðнá¹ûʱ£¬¾ÍÁ¢¿ÌÊÍ·Å´ËÏß³Ì×ÊÔ´¸øÆäËûÇëÇ󣬵ȵ½Êý¾Ý¿âÖ´Ðнá¹û·µ»Øºó²Å¼ÌÐøÖ´ÐУ¬ÔÚJavaÖÐĿǰÖ÷Òª¿ÉÓÃÓÚʵÏÖЭ³ÌµÄ¿ò¼ÜΪKilim. ÔÚʹÓÃKilimÖ´ÐÐixiangÈÎÎñʱ£¬²¢²»´´½¨Thread,¶øÊǸÄΪ´´½¨Task,TaskÏà¶ÔÓÚThread¶øÑÔ¾ÍÇáÁ¿¼¶¶àÁË¡£µ±´ÎTaskÒª×ö×èÈû¶¯×÷ʱ£¬¿Éͨ¹ýMailbox.get »ò Task.pauseÀ´×èÈûµ±Ç°µÄTask,Kilim»á±£´æTaskÖ®ºóÖ´ÐÐÐèÒªµÄ¶ÔÏóÐÅÏ¢£¬²¢ÊÍ·ÅTaskÖ´ÐÐËùÕ¼ÓõÄÏß³Ì×ÊÔ´£»µ±TaskµÄ×èÈû¶¯×÷Íê³É»ò±»»½ÐÑʱ£¬´ËʱKilim»áÖØÐÂÔØÈëTaskËùÐèµÄ¶ÔÏóÐÅÏ¢£¬»Ö¸´TaskµÄÖ´ÐУ¬Ï൱ÓÚKilimÀ´³Ðµ£ÁËÏ̵߳ĵ÷¶ÈÒÔ¼°ÉÏÏÂÎÄÇл»¶¯×÷¡£ ÕâÖÖ·½Ê½Ïà¶ÔÔ­ÉúThread·½Ê½¸üΪÇáÁ¿£¬ÇÒÄܹ»¸üºÃµÚÀûÓÃCPU£¬Òò´Ë¿É×öµ½½öÆô¶¯CPUºËÊýµÄÏß³ÌÊý£¬ÒÔ¼°´óÁ¿µÄTaskÀ´³Ô³Å¸ß²¢·¢Á¿£¬Kilim´øÀ´µÄÊÇÏß³ÌʹÓÃÂʵÄÌáÉý£¬µ«Í¬Ê±ÓÉÓÚÒªÔÚJVM¶ÑÖб£´æTaskÉÏÏÂÎÄÐÅÏ¢£¬Òò´ËÔÚ²ÉÓÃKilimµÄÇé¿öÏÂÒªÏûºÄ¸ü¶àµÄÄÚ´æ¡£

ÏÂÃæÊÇÒ»¸ö´«Í³·½Ê½µÄÀý×Ó£ºSimpleBenchMark.java ºÍ»ùÓÚKilim²ÉÓÃCoroutine·½Ê½Ö§³Å¸ß²¢·¢ÇëÇóÀý×Ó£ºSimpleBenchMarkV2.java

ͨ¹ýÔËÐбȽϴ«Í³·½Ê½ºÄʱ´ó¸ÅΪ3077ms,¶ø»ùÓÚKilim²ÉÓÃЭ³Ì·½Ê½µÄºÄʱ´ó¸ÅΪ277ms,¿É¼ûÔÚÕâÖָ߲¢·¢µÄÇé¿öÏ£¬Ð­³Ì·½Ê½¶ÔÐÔÄÜÌáÉýÒÔ¼°Ö§³Å¸ü¸ß²¢·¢Á¿¿ÉÒÔÆðµ½ºÜ´óµÄ×÷Óá£

ĿǰKilim»¹±È½ÏУ¬Ã»ÓÐÉÌÓóɹ¦µÄ°¸Àý£¬Èç´òËãÔÚʵ¼ÊµÄϵͳÖÐʹÓ㬻¹ÐèÒª½÷É÷¡£Ò»·½ÃæÊÇ0.7°æ±¾ÖлùÓÚobject.wait/notify»úÖÆÊµÏÖµÄSchedulerÔÚ¸ßѹÏ»á³öÏÖbug,¿É×ÔÐлùÓÚThreadPoolExecutor½øÐиÄÔ죻ÁíÒ»¸ö·½ÃæMailbox.get(timeout)ÊÇ»ùÓÚTimerʵÏֵģ¬ÓÉÓÚTimerÔÚÔö¼Ótaskµ½¶ÓÁÐʱºÍÔËÐÐtask¶ÓÁÐÊÇ»¥³âµÄ(¼´Ê¹ÊÇScheduledTheadPoolExecutorҲͬÑùÐèÒªËøÕû¸ö¶ÓÁÐ)£¬¶ÔÓÚ´ó²¢·¢µÄÓ¦ÓöøÑÔÕâÀïÊǸöDZÔ򵀮¿¾±¡£¶ÔÓÚJavaÓ¦ÓöøÑÔ£¬TimerÊÇÒ»¸ö¾­³£ÓÃÀ´ÊµÏÖ¶¨Ê±ÈÎÎñµÄÀ࣬µ«TimerµÄÐÔÄÜÔڸ߲¢·¢ÏÂÒ»°ã£¬¸ÐÐËȤµÄ¶ÁÕß¿ÉÒÔ³¢ÊÔ»ùÓÚTimerWheelËã·¨À´ÌáÉýTimerµÄÐÔÄÜ¡£

ÏÖÔÚÒªÔÚJavaÓ¦ÓÃÖÐʹÓÃKilimÀ´ÊµÏÖЭ³Ì·½Ê½²¢²»¼òµ¥£¬ÒòΪЭ³Ì·½Ê½ÒªÇóËùÓеIJÙ×÷¶¼²»×èÈûÔ­ÉúỊ̈߳¬Õâ¾ÍÒªÇóÓ¦ÓÃÖв»ÄÜʹÓÃĿǰJavaÀïµÄͬ²½¡¢ËøµÈ»úÖÆ¡£³ýÁËÕâЩÍ⣬»¹ÐèÒª½â¾öͬ²½·ÃÎÊÊý¾Ý¿â¡¢²Ù×÷ÎļþµÈÎÊÌ⣬ÕâЩ¶¼±ØÐë¸ÄΪÊÇÒì²½·½Ê½»òKilimÖеÄTaskÔÝÍ£µÄ»úÖÆ¡£

ĿǰSun JDK7ÖÐÒ²ÓÐÒ»¸öÖ§³ÖЭ³Ì·½Ê½µÄʵÏÖhttp://code.google.com/p/coroutines/¡£

ÁíÍâ»ùÓÚJVMµÄScalaµÄActorÒ²¿ÉÓÃÓÚÔÚJavaÖÐʹÓÃЭ³Ì¡£

³ýÁËÈí¼þ·½Ãæ¶ÔÌáÉýCPUʹÓÃÂÊ×ö³öµÄŬÁ¦Í⣬Ӳ¼þ·½ÃæµÄCPUרҵ»¯(ÀýÈç GPU½øÐÐͼÐμÆËã)Ò²ºÜÖµµÄ¹Ø×¢¡£

5.2.2 ÄÚ´æÏûºÄÑÏÖØµÄ½â¾ö·½·¨

ÔÚÄÚ´æÏûºÄ·½Ã棬×îÃ÷ÏÔµÄÔÚÓÚÏûºÄÁ˹ý¶àµÄJVM HeapÄڴ棬Ôì³ÉGCƵ·±Ö´ÐеÄÏÖÏ󣬶øÎïÀíÄÚ´æ·½ÃæµÄÏûºÄͨ³£À´Ëµ²»»á³ÉΪJavaÓ¦ÓÃÖеÄÖ÷ÒªÎÊÌâ¡£³ýÁËJVMµÄµ÷ÓÅÍ⣬ÔÚѰÕÒµ½ÄÚ´æÏûºÄÑÏÖØµÄ´úÂëºó£¬¿É´Ó´úÂë±¾Éí½øÐÐÓÅ»¯£¬±ÜÃâÄÚ´æ×ÊÔ´ÏûºÄ¹ý¶à¡£´Ë´¦¾Í½éÉÜһЩJVM HeapÄÚ´æÏûºÄÑÏÖØÊ±³£ÓõijÌÐòµ÷ÊÔ·½·¨¡£

5.2.2.1. ÊͷŲ»±ØÒªµÄÒýÓÃ

ÄÚ´æÏûºÄ×îÑÏÖØµÄÇé¿öÖÐ×îµäÐ͵ÄÒ»ÖÖÏÖÏóÊÇ´úÂëÖгÖÓÐÁ˲»ÐèÒªµÄ¶ÔÏóÒýÓã¬Ôì³ÉÕâЩ¶ÔÏóÎÞ·¨±»GC,´Ó¶øÕ¼¾ÝÁËJVM¶ÑÄÚ´æ¡£ÕâÖÖÇé¿ö×îµäÐ͵ÄÒ»¸öÀý×ÓÊÇÔÚ¸´ÓÃÏ̵߳ÄÇé¿öÏÂʹÓÃThreadLocal£¬ÓÉÓÚÏ̸߳´Óã¬ThreadLocalÖдæ·ÅµÄ¶ÔÏóÈçδ×öÖ÷¶¯ÊͷŵϰÔò²»»á±»GCÊÍ·Å¡£Ê¾ÀýÈçÏ£º

Ö´ÐдúÂ룬ͨ¹ýjstat¹Û²ì£¬»á·¢ÏÖÔÚOld Generation JVMÄÚ´æÒ»Ö±±»Ê¹ÓÃÁË60MB×óÓÒ¡£

Ö´ÐдúÂ룬ͨ¹ýjstat¹Û²ì£¬»á·¢ÏÖÔÚOld Generation JVMÄÚ´æÒ»Ö±±»Ê¹ÓÃÁË60MB×óÓÒ¡£¶ÔÓÚÕâÖÖÇé¿ö£¬Òª×¢ÒâÔÚÏß³ÌÄڵ͝×÷Ö´ÐÐÍê±ÏʱִÐÐThreadLocal.set°Ñ¶ÔÏóÇå³ý£¬±ÜÃâ³ÖÓв»±ØÒªµÄ¶ÔÏóÒýÓ᣻ᷢÏÖÔÚOld Generation JVMÄÚ´æ´Ó60MB×óÓÒ½µµ½ÁË1M×óÓÒ¡£

5.2.2.2. ʹÓöÔÏó»º´æ³Ø

´´½¨¶ÔÏóµÄʵÀýÒªºÄ·ÑÒ»¶¨µÄCPUÒÔ¼°Äڴ棬ʹÓöÔÏó»º´æ³ØÒ»¶¨³Ì¶ÈÉϿɽµµÍJVM HeapÄÚ´æµÄʹÓá£

ͨ¹ýÔËÐгÌÐò£ºObjectPoolDemo.java(ÏÂÔØµØÖ·¼û ²Î¿¼²¿·Ö)

1 ûÓвÉÓöÔÏó»º´æ³ØÇé¿ö

²ÎÊý£ºVM Args : -Xms128M -Xmx128M -Xmn64M ( runMode is NOTUSE_OBJECTPOOL:)

Main Args:

Ö´Ðнá¹û£ºExecute summary: Round( 10 ) Thread Per Round( 100 ) Object Factor ( 10 ) Execute Time ( 111594 ) ms

2 ²ÉÓöÔÏó»º´æ³ØÇé¿ö

²ÎÊý£ºVM Args : -Xms128M -Xmx128M -Xmn64M ( runMode is USE_OBJECTPOOL:)

Main Args: 2

Ö´Ðнá¹û£ºExecute summary: Round( 10 ) Thread Per Round( 100 ) Object Factor ( 10 ) Execute Time ( 1094 ) ms

´ÓÉÏÃæµÄ½á¹û¶Ô±È¿É¿´³ö£¬ÔÚÄÚ´æÏûºÄÑÏÖØµÄÇé¿öÏ£¬²ÉÓöÔÏó»º´æ³Ø¿É´ó·ù¶ÈÌáÉýÐÔÄÜ£¬±ÜÃâ´´½¨¶ÔÏóËùºÄ·ÑµÄʱ¼ä¼°Æµ·±GCÔì³ÉµÄÏûºÄ¡£

5.2.2.3. ²ÉÓúÏÀíµÄ»º´æÊ§Ð§Ëã·¨

ÉÏÃæËµµ½Á˲ÉÓöÔÏó»º³å³ØÀ´½µµÍÄÚ´æµÄÏûºÄ£¬µ«Èç¹û·ÅÈëÌ«¶àµÄ¶ÔÏóÔÚ»º´æ³ØÖУ¬·´¶ø»áÔì³ÉÄÚ´æµÄÑÏÖØÏûºÄ¡£Í¬Ê±ÓÉÓÚ»º´æ³ØÒ»Ö±¶ÔÕâЩ¶ÔÏó³ÖÓÐÒýÓ㬴Ӷø»áÔì³ÉFull GCÔö¶à£¬¶ÔÓÚÕâÖÖÇé¿öÒªºÏÀí¿ØÖÆ»º´æ³ØµÄ´óС¡£

¿ØÖÆ»º´æ³Ø´óСµÄÎÊÌâÔÚÓÚµ±µ½´ï»º´æ³ØµÄ×î´óÈÝÁ¿ºó£¬Èç¹ûÒª¼ÓÈëеĶÔÏó¸ÃÈçºÎ´¦Àí£¿ÓÐһЩ¾­µäµÄ»º´æÊ§Ð§Ëã·¨À´Çå³ý»º³å³ØÖеĶÔÏó£¬ÀýÈçFIFO,LRU,LFUµÈ¡£²ÉÓÃÕâЩËã·¨¿É¿ØÖÆ»º´æ³ØÖеĶÔÏóÊýÄ¿£¬±ÜÃ⻺´æ³ØÖеĶÔÏóÊýÁ¿ÎÞÏÞÉÏÕÇ¡£

ObjectCachePoolDemo.java(ÏÂÔØµØÖ·¼û ²Î¿¼²¿·Ö)

ÊäÈë²ÎÊý£ºÏòÈÝÆ÷×ܲåÈë15¸öÔªËØ£¬±£´æÈÝÆ÷10¸öÔªËØ

Êä³ö½á¹û£º

size(10), policy(1) FIFO 
6, 6
7, 7
8, 8
9, 9
10, 10
11, 11
12, 12
13, 13
14, 14
15, 15

·ÖÎö£º°´×ÅFIFO»º´æÊ§Ð§Ëã·¨£¬Ê§Ð§ÁËÔªËØ1£¬2,3,4,5£¬±£³ÖÈÝÆ÷ÖÐÓÐ10¸öÔªËØ

5.2.2.4. ºÏÀíʹÓÃSoftReference ºÍ WeakReference

¶ÔÓÚÕ¼¾ÝÄڴ浫ÓÖ²»ÊDZØÐë´æÔڵĶÔÏó£¬ÀýÈ绺´æ¶ÔÏó£¬Ò²¿ÉÒÔ»ùÓÚSoftReference»òWeakReferenceµÄ·½Ê½À´½øÐлº´æ¡£SoftReferenceµÄ¶ÔÏó»áÔÚÄÚ´æ²»¹»ÓõÄʱºò½øÐлØÊÕ£¬WeakReferenceµÄ¶ÔÏóÔò»áÔÚFull GCµÄʱºò»ØÊÕ£¬²ÉÓÃÕâÁ½ÖÖ·½Ê½Ò²ÄÜÒ»¶¨³ÌÐòÉϼõÉÙJVM HeapÇøÄÚ´æµÄÏûºÄ¡£

¶ÔÓÚÒÔÉÏÓ²¼þ×ÊÔ´ÏûºÄ¹ý¶àÔì³ÉµÄÐÔÄܲ»×ãµÄÏÖÏ󣬳ýÁËÈí¼þ·½Ãæµ÷ÓÅÍ⣬ÔÚ´ó¶àÊýÇé¿öÏ»¹¿Éͨ¹ýÉý¼¶»òÔö¼ÓÓ²¼þÀ´ÌáÉý³ÌÐòµÄÐÔÄÜ¡£

5.2.2 ÎļþIOÏûºÄÑÏÖØµÄ½â¾ö·½·¨

´Ó³ÌÐò½Ç¶È¶øÑÔ£¬Ôì³ÉÎļþIOÏûºÄÑÏÖØµÄÔ­ÒòÖ÷ÒªÊǶà¸öÏß³ÌÔÚд´óÁ¿µÄÊý¾Ýµ½Í¬Ò»¸öÎļþ£¬µ¼ÖÂÎļþºÜ¿ì±äµÄºÜ´ó£¬´Ó¶øÐ´ÈëËÙ¶ÈÔ½À´Ô½Âý£¬²¢Ôì³É¸÷Ï̼߳¤ÁÒÇÀÎļþËø£¬¶ÔÓÚÕâÀàÇé¿ö£¬Í¨³£µ÷ÓŵÄÓÐÒÔÏ·½·¨£º¿ÉÒԲο¼log4j

5.2.2.1 Ò첽дÎļþ

½«Ð´ÎļþµÄͬ²½¶¯×÷¸ÄΪÒì²½¶¯×÷£¬±ÜÃâÓ¦ÓÃÓÉÓÚдÎļþÂý¶øÐÔÄÜϽµÌ«¶à£¬ÀýÈçдÈÕÖ¾£¬¿ÉÒÔʹÓÃlog4jÌṩµÄAsyncAppender.

5.2.2.2 ÅúÁ¿¶Áд

Ƶ·±µÄ¶Áд²Ù×÷¶ÔIOÏûºÄ»áºÜÑÏÖØ£¬ÅúÁ¿²Ù×÷½«´ó·ù¶ÈÌáÉýIO²Ù×÷µÄÐÔÄÜ¡£

5.2.2.3 ÏÞÁ÷

Ƶ·±¶ÁдµÄÁíÍâÒ»¸öµ÷ÓÅ·½Ê½ÊÇÏÞÁ÷£¬´Ó¶ø½«ÎļþIOÏûºÄ¿ØÖƵ½Ò»¸öÄܽÓÊܵķ¶Î§¡£log.error log.warn. log.info. log.debug.

5.2.2.4 ÏÞÖÆÎļþ´óС

²Ù×÷Ì«´óµÄÎļþÒ²ÊÇÔì³ÉÎļþIOЧÂʵ͵ÄÒ»¸öÔ­Òò£¬Òò´Ë¶ÔÓÚÿ¸öÊä³öµÄÎļþ£¬¶¼Ó¦¸Ã×ö´óСµÄÏÞÖÆ£¬ÔÚ³¬¹ý×î´óÖµºó¿ÉÉú³ÉÒ»¸öеÄÎļþ,ÀàËÆlog4jÖÐRollingFileAppenderµÄmaxFileSizeÊôÐÔµÄ×÷Óá£

³ýÁËÒÔÉÏÕâЩÍ⣬»¹ÓоÍÊǾ¡¿ÉÄܲÉÓûº³åÇøµÈ·½Ê½À´¶ÁÈ¡ÎļþÄÚÈÝ£¬±ÜÃâ²»¶ÏÓë²Ù×÷ϵͳ½»ÐУ¬²Î¿¼ Sun¹Ù·½µÄ¹ØÓÚJavaÎļþIOÓÅ»¯µÄÎÄÕÂ:¼û²Î¿¼²¿·ÖµÄ[4.5]Articles: Tuning Java I/O Performance

5.2.3 ÍøÂçIOÏûºÄÑÏÖØµÄ½â¾ö·½·¨

´Ó³ÌÐò½Ç¶È¶øÑÔ£¬Ôì³ÉÍøÂçIOÏûºÄÑÏÖØµÄÔ­ÒòÖ÷ÒªÊÇͬʱÐèÒª·¢ËÍ»ò½ÓÊյİüÌ«¶à¡£¶ÔÓÚÕâÀàÇé¿ö£¬³£Óõĵ÷ÓÅ·½·¨Îª½øÐÐÏÞÁ÷£¬ÏÞÁ÷ͨ³£ÊÇÏÞÖÆ·¢ËÍpacketµÄƵÂÊ£¬´Ó¶øÔÚÍøÂçIOÏûºÄ¿É½ÓÊܵÄÇé¿öÏÂÀ´·¢ËÍpacket. ¡¶Linux Performance and Tuning Guidelines.pdf¡·¡¶IOµÄ×èÈûÓë·Ç×èÈû¡¢Í¬²½ÓëÒì²½ÒÔ¼°JavaÍøÂçIO½»»¥·½Ê½¡·

5.3 ¶ÔÓÚ×ÊÔ´ÏûºÄ²»¶à£¬µ«³ÌÐòÖ´ÐÐÂýµÄÇé¿ö(Ðè²¹³ä)

¶ÔÓÚ·Ö²¼Ê½JavaÓ¦ÓöøÑÔ£¬Ôì³ÉÕâÕâÖÖÇé¿öµÄÖ÷ÒªÔ­Òòͨ³£ÓÐËø¾ºÕù¼¤ÁÒ¼°Î´³ä·Ö·¢»ÓÓ²¼þ×ÊÔ´Á½ÖÖ¡£

5.3.1 Ëø¾ºÕù¼¤ÁÒ

Ï̶߳àÁ˺ó£¬Ëø¾ºÕùµÄ×´¿ö»á±È½ÏÃ÷ÏÔ£¬ÕâʱÏ̺߳ÜÈÝÆ÷´¦ÓڵȴýËøµÄ×´¿ö£¬´Ó¶øµ¼ÖÂÐÔÄÜϽµÒÔ¼°CPU syÉÏÉý¡£

ʾÀý:LockHotDemo.java

Ö´Ðнá¹û£ºExecute summary: Round( 10 ) Thread Per Round( 200 ) Execute Time ( 10579 ) ms

´Ëʱ¸÷·½ÃæµÄ×ÊÔ´ÏûºÄ²¢²»¸ß£¬µ«ÐÔÄܱÈÃ»Ó´ËøµÄÇé¿öϽµÁ˷dz£¶à¡£´ÓÕâ¸öÀý×ӿɼû£¬ËøÊÇÓ°ÏìÐÔÄܵÄÖØÒªÒòËØ£¬µ«ÎªÁ˱£Ö¤×ÊÔ´µÄÒ»ÖÂÐÔ£¬¶àÏß³ÌÓ¦ÓÃÖÐËøµÄʹÓÃÊDz»¿É±ÜÃâµÄ£¬Ö»Äܾ¡Á¿È¥½µµÍÏ̼߳äµÄËø¾ºÕù£¬³£¼ûµÄ·½·¨ÈçÏ£ºÊ¹Óò¢·¢°üÖеÄÀࡢʹÓÃTreiberËã·¨¡¢Ê¹ÓÃMichael-Scott·Ç×èÈû¶ÓÁÐËã·¨¡¢¾¡¿ÉÄܼõÉÙËø¡¢²ð·ÖËø¡¢È¥³ý¶Áд²Ù×÷µÄ»¥³âËøµÈ

5.3.1.1 ʹÓò¢·¢°üÖеÄÀà

µÚÈý·½²¢·¢¿â£ºDisruptor¡¢JPPF¡¢Kilim¡¢Amino

¶ÔÓÚjava.util.concurrent°üÖеÄÀàµÄ·ÖÎö£¬¿ÉÒÔ¿´³ö£¬²¢·¢°üÖеÄÀà¶àÊý¶¼²ÉÓÃÁË lock-free¡¢nonblockingËã·¨£¬¼õÉÙÁ˶àÏß³ÌÇé¿öÏÂ×ÊÔ´µÄËø¾ºÕù£¬Òò´Ë¶ÔÓÚÏ̼߳äÒª¹²Ïí²Ù×÷µÄ×ÊÔ´¶øÑÔ£¬Ó¦¾¡Á¿Ê¹Óò¢·¢°üÖеÄÀàÀ´ÊµÏÖ(AtomicInteger¡¢ConcurrentHashMapµÈ)£¬µ±ÏµÍ³ÌṩµÄ²¢·¢°üÖеÄÀàÎÞ·¨Âú×ãÐèÇóʱ£¬¿É²Î¿¼Ñ§Ï°Ò»Ð©nonblockingËã·¨À´×ÔÐÐʵÏÖ£¬nonblockingËã·¨µÄ»úÖÆ£¬Îª»ùÓÚCASÀ´×öµ½ÎÞÐèlock¾Í¿ÉʵÏÖ×ÊÔ´Ò»ÖÂÐԵı£Ö¤£¬Ö÷ÒªµÄʵÏÖnonblockingµÄËã·¨ÓУº

5.3.1.2 ʹÓÃTreiberËã·¨

TreiberËã·¨Ö÷ÒªÓÃÓÚʵÏÖStack,»ùÓÚTreiberË㷨ʵÏÖµÄÎÞ×èÈûµÄStack´úÂëÈçÏ£º

´úÂëÀý×Ӳο¼£º²¢·¢Õ»ConcurrentStack<E>£º http://blog.csdn.net/ajian005/article/details/18324407
ÓÉÓÚStackÊÇLIFO·½Ê½£¬Òò´Ë²»ÄܲÉÓÃÀàËÆLinkedBlockingQueueÖÐÁ½°ÑËøµÄ»úÖÆ¡£ÕâÀïÇÉÃîµØ²ÉÓÃAtomicReferenceÀ´ÊµÏÖÁËÎÞ×èÈûµÄpushºÍpop, ÔÚpushʱ»ùÓÚAtomicReferenceµÄCAS·½·¨À´±È½ÏĿǰµÄheadÊÇ·ñÒ»Ö¡£Èç²»Ò»Ö£¬ËµÃ÷ÓÐÆäËûÏ̸߳͝ÁË£¬ÈçÓи͝Ôò¼ÌÐøÑ­»·£¬Ö±µ½Ò»Ö£¬²ÅÐÞ¸ÄheadÔªËØ£¬ÔÚpopʱ¿ÉÒÔ²ÉÓÃͬÑùµÄ·½Ê½½øÐвÙ×÷¡£

²âÊÔÓÃÀý£¬²âÊÔ½á¹û£º

Stack consume Time: 125 ms

ConcurrentStack consume Time: 63 ms

5.3.1.3 ʹÓÃMichael-Scott·Ç×èÈû¶ÓÁÐËã·¨

ºÍTreiberËãÀàËÆ£¬Michael-ScottËã·¨Ò²ÊÇ»ùÓÚCASÒÔ¼°AtomicReferenceÀ´ÊµÏÖ¶ÓÁеķÇ×èÈû²Ù×÷£¬java.util.concurrentÖеÄConcurrentLinkedQueue¾ÍÊǵäÐ͵ĻùÓÚMichael-ScottʵÏֵķÇ×èÈû¶ÓÁС£ConcurrentLinkedQueueÔÚÖ´ÐÐoffer¶¯×÷ʱ£¬Í¨¹ýCAS±È½ÏÄõ½µÄtailÔªËØÊÇ·ñΪµ±Ç°´¦ÓÚĩβµÄÔªËØ£¬Èç²»ÊÇÔò¼ÌÐøÑ­»·£¬ÈçÊÇÔò½«tailÔªËØ¸üÐÂΪеÄÔªËØ¡£

ÔÚÖ´ÐÐpoll¶¯×÷ʱ£¬Í¨¹ýCAS±È½ÏÄõ½µÄheadÔªËØÊÇ·ñΪµ±Ç°´¦ÓÚÊ×λµÄÔªËØ£¬Èç²»ÊÇÔò¼ÌÐøÑ­»·£¬ÈçÊÇÔò½«headºóµÄÔªËØ¸³Öµ¸øhead,ͬʱ»ñȡ֮ǰheadÔªËØÖеÄÖµ²¢·µ»Ø¡£

´ÓÉÏÃæÁ½ÖÖËã·¨À´¿´£¬»ùÓÚCAS ºÍ AtomicReferenceÀ´ÊµÏÖÎÞ×èÈûÊDz»´íµÄÑ¡Ôñ¡£µ«ÖµµÃ×¢ÒâµÄÊÇ£¬ÓÉÓÚCASÊÇ»ùÓÚ²»¶ÏµÄÑ­»·±È½ÏÀ´±£Ö¤×ÊÔ´Ò»ÖÂÐԵ쬶ÔÓÚ³åÍ»½Ï¶àµÄÓ¦Óó¡¾°¶øÑÔ£¬CAS»á´øÀ´¸ü¸ßµÄCPUÏûºÄ£¬Òò´Ë²»Ò»¶¨²ÉÓÃCASʵÏÖÎÞ×èÈûµÄ¾ÍÒ»¶¨±È²ÉÓÃLock·½Ê½µÄÐÔÄܺá£Òµ½çÖл¹ÓÐһЩÎÞ×èÈûËã·¨µÄ¸Ä½ø£¬ÀýÈçMCAS¡¢WSTMµÈ¡£

5.3.1.4 ¾¡¿ÉÄÜÉÙÓÃËø

¾¡¿ÉÄÜÈÃËø½öÔÚÐèÒªµÄµØ·½³öÏÖ£¬Í¨³£Ã»±ØÒª¶ÔÕû¸ö·½·¨¼ÓËø£¬¶øÖ»¶ÔÐèÒª¿ØÖƵÄ×ÊÔ´×ö¼ÓËø²Ù×÷¡£

½«Ëø×îС»¯ºó£¬ÐÔÄÜ»áÓÐÌá¸ß£¬ÔÚ±àд¶àÏ̳߳ÌÐòʱ£¬Òª×Ðϸ¿¼ÂÇÄÄЩµØ·½ÊÇÒª¼ÓËøµÄ£¬ÄÄЩµØ·½ÊDz»Òª¼ÓËøµÄ¡£¾¡¿ÉÄÜÈÃËø×îС»¯£¬Ö»¶Ô»¥³â¼°Ô­×Ó²Ù×÷µÄµØ·½¼ÓËø£¬¼ÓËøÊ±¾¡¿ÉÄÜÒÔ±»°üº¬×ÊÔ´µÄ×îСÁ£¶ÈΪµ¥Î»¡£

5.3.1.5 ²ð·ÖËø

²ð·ÖËø¼´°Ñ¶ÀÕ¼Ëø²ð·ÖΪ¶à°ÑËø£¬³£¼ûµÄÓжÁÐ´Ëø²ð·Ö¼°ÀàËÆConcurrentHashMapÖÐĬÈϲð·ÖΪ16°ÑËøµÄ·½·¨¡£²ð·ÖËøºÜ´ó³Ì¶ÈÉÏÄÜÌá¸ß¶ÁдµÄËÙ¶È£¬µ«ÐèҪעÒâµÄÊÇÔÚ²ÉÓòð·ÖËøºó£¬È«¾ÖÐÔÖʵIJÙ×÷»á±äµÄ±È½Ï¸´ÔÓ£¬ÀýÈçConcurrentHashMapÖеÄsize²Ù×÷¡£

ÊÇ·ñ²ð·ÖËø»¹µÃ¸ù¾ÝÒµÎñ³¡¾°À´¾ö¶¨¡£ÓÐЩ³¡¾°²¢²»ÊʺÏ×öËøµÄ²ð·Ö£¬¶øÇÒËø²ð·ÖµÄÌ«¶àÒ²»áÔì³ÉÆäËû¸±×÷Óã¬ÀýÈçCPUµÄÏûºÄÃ÷ÏÔÔö¼ÓµÈ£¬Òò´ËËø²ð·ÖÒªÔÚºÏÀíµÄÒµÎñ³¡¾°ÒÔ¼°CPUÏûºÄϽøÐС£

5.1.3.6 È¥³ý¶Áд²Ù×÷µÄ»¥³âËø

ÔÚÐÞ¸Äʱ¼ÓËø£¬²¢ÔÚ¸´ÖƶÔÏóʱ½øÐÐÐ޸ģ¬ÐÞ¸ÄÍê±ÏºóÇл»¶ÔÏóµÄÒýÓ㬶ø¶ÁȡʱÔò²»¼ÓËø£¬ÕâÖÖ·½Ê½³ÆÎªCopyOnWrite.

CopyOnWriteArrayListÊÇCopyOnWrite·½·¨µÄµäÐÍʵÏÖ£¬CopyOnWriteµÄºÃ´¦ÊÇ¿ÉÒÔÃ÷ÏÔÌáÉý¶ÁµÄÐÔÄÜ£¬¶ÔÓÚ¶Á¶àдÉÙµÄÓ¦Ó÷dz£Êʺϣ¬µ«ÓÉÓÚд²Ù×÷ʱÿ´Î¶¼Òª¸´ÖÆÒ»·Ý¶ÔÏ󣬻áÔì³É¸ü¶àµÄÄÚ´æÏûºÄ¡£

5.3.2 δ³ä·ÖʹÓÃÓ²¼þ×ÊÔ´

ÕâÖÖÇé¿öÒ²ÊÇÐÔÄܵ͵ÄÓ¦ÓÃÖо­³£³öÏֵģ¬Ö÷ÒªÌåÏÖÔÚδ³ä·ÖʹÓÃCPU ºÍ ÄÚ´æ¡£

5.3.2.1 δ³ä·ÖʹÓÃCPU

¶ÔÓÚJavaÓ¦ÓöøÑÔ£¬Î´³ä·ÖʹÓÃCPUµÄÔ­ÒòÖ÷ÒªÊÇÔÚÄܲ¢Ðд¦ÀíµÄ³¡¾°ÖÐδʹÓÃ×ã¹»µÄÏ̡߳£

Àý×Ó CpuNotUseEffectiveDemo.java µ¥Ïß³Ì

¶ÔÓÚÓжà¸ö»ò¶àºËµÄCPU¶øÑÔÒª³ä·ÖʹÓÃCPU.

Àý×Ó CpuUseEffectiveDemo.java µ¥Ïß³Ì

¶ÔÓÚ´ËÀà¿ÉÒÔÑݱäΪ¶àÏß³ÌÒ²ÎÞÐë¼ÓËøµÄ³¡¾°¶øÑÔ£¬Æô¶¯¶à¸öÏ̺߳óµÄÐÔÄÜ»áÔ¶¸ßÓÚµ¥Ị̈߳¬²¢ÇÒÖ»ÒªÆô¶¯µÄÏß³ÌÊýºÏÀí£¬Ò²²»»á¸øCPUÔì³É¹ý´óµÄ¸ºµ£¡£Èç´Óµ¥Ïß³ÌÑݱäΪ¶àÏß³ÌÒª¼ÓËø£¬ÔòÒªÒýÈ뾡Á¿¼õÉÙËø¾ºÕùµÄ·½·¨£¬²¢½øÐÐÐÔÄܲâÊÔÒÔ±£Ö¤µ÷ÓźóµÄ×ÊÔ´ÏûºÄÒÔ¼°ÐÔÄÜÂú×ãÒªÇó¡£

´ËÖÖÀàÐ͵ij¡¾°»¹Óв»ÉÙ£¬ÀýÈçµ¥Ï̵߳ļÆË㣬¿ÉÒÔ²ð·ÖΪ¶àÏß³ÌÀ´·Ö±ð¼ÆË㣬×îºó½«½á¹ûºÏ²¢£¬ÕâÑùµÄ·½Ê½Ò²¿ÉºÜ´ó³Ì¶ÈÌáÉýϵͳµÄÐÔÄÜ£¬JDK7ÖеÄfork-join¿ò¼Ü¿ÉÒÔ¸øÒÔÉÏÕâÀೡ¾°Ìṩһ¸öºÃµÄÖ§³Å·½·¨¡£

ÔÚCPU×ÊÔ´ÏûºÄ¿É½ÓÊÜ£¬ÇÒ²»»áÒòΪÏß³ÌÔö¼Ó´øÀ´¼¤ÁÒËø¾ºÕùµÄ³¡¾°Ï£¬Ó¦Êʵ±¶Ô´¦Àí¹ý³Ì½øÐзֽ⣬Ôö¼ÓÏß³ÌÊý´Ó¶øÄܲ¢Ðд¦ÀíÒÔÌáÉýϵͳµÄÔËÐÐÐÔÄÜ¡£µ«ÔÚÖØ¹¹Îª²¢ÐÐʱ£¬Òª×¢Òâ¿ØÖÆÄÚ´æÏûºÄ£¬¶øÇÒͨ¹ýÖØ¹¹Îª²¢ÐÐÄÜÌáÉýµÄÐÔÄÜÒ²ÊÇÓÐÏ޵ġ£ÖøÃûµÄAmdahl¶¨ÂÉÖеļòµ¥¼ÆË㹫ʽΪ£º

ϵͳÌáÉýµÄÐÔÄÜ = 1/ (F+(1-F)/N), ÆäÖÐFΪ±ØÐë´®Ðл¯µÄÖ´ÐÐÔÚÕû¸öÖ´Ðйý³ÌÖÐËùÕ¼µÄ±ÈÂÊ£¬ NΪ´¦ÀíÆ÷¸öÊý£¬ÀýÈçÔÚÕû¸öÖ´Ðйý³ÌÖд®Ðл¯µÄ¹ý³ÌÕ¼50%,ÄÇô×î¶àÖ»ÄÜÌáÉý2±¶µÄÐÔÄÜ¡£

5.3.2.2 δ³ä·ÖʹÓÃÄÚ´æ

δ³ä·ÖʹÓÃÄÚ´æµÄ³¡¾°·Ç³£¶à£¬ÈçÊý¾ÝµÄ»º´æ¡¢ºÄʱ×ÊÔ´µÄ»º´æ(ÀýÈçÊý¾Ý¿âÁ¬½ÓµÄ´´½¨¡¢ÍøÂçÁ¬½ÓµÄ´´½¨µÈ)¡¢Ò³ÃæÆ¬¶ÎµÄ»º´æµÈ£¬ÕâÑùµÄ³¡¾°±È½ÏÈÝÒ×Àí½â£¬±Ï¾¹ÄÚ´æµÄ¶ÁÈ¡¿Ï¶¨Ô¶¿ìÓÚÓ²ÅÌ¡¢ÍøÂçµÄ¶ÁÈ¡¡£µ«Ò²Òª±ÜÃâÄÚ´æ×ÊÔ´µÄ¹ý¶ÈʹÓã¬ÔÚÄÚ´æ×ÊÔ´ÏûºÄ¿É½ÓÊÜ£¬GCƵÂʼ°ÏµÍ³½á¹¹(ÀýÈ缯Ⱥ»·¾³¿ÉÄÜ»á´øÀ´»º´æµÄͬ²½µÈ)¿É½ÓÊܵÄÇé¿öÏ£¬Ó¦³ä·ÖʹÓÃÄÚ´æÀ´»º´æÊý¾Ý£¬ÌáÉýϵͳµÄÐÔÄÜ¡£

5.3.2.3 ¶ÔÓÚÊý¾ÝÁ¿´óÔì³ÉµÄÐÔÄܲ»×ã

Êý¾Ý·Ö¿â¡¢·Ö±í¡¢·ÖÇøµÈ

ºÃµÄµ÷ÓŲßÂÔÓ¦ÊÇÊÕÒæ±È(µ÷ÓźóÌáÉýµÄЧ¹û/µ÷ÓŸĶ¯Ëù¸¶³öµÄ´ú¼Û)×î¸ßµÄ£¬Í¨³£À´Ëµ¹¦Äܼòµ¥µÄϵͳµ÷ÓűȽϺÃ×ö£¬·ñÔòÓпÉÄܳöÏÖµ÷ÓÅÁ˵±Ç°¹¦ÄÜÓ°Ïìµ½ÁËÆäËû¹¦ÄÜ£¬Òò´ËÓ¦¾¡Á¿±£³Öµ¥»úÉÏÓ¦Óù¦ÄܵĴ¿´âÐÔ£¬ÕâÊÇ´óÐÍϵͳµÄ»ù±¾¼Ü¹¹Ô­Ôò¡£

´Ó´¿´âµÄÈí¼þµ÷ÓŽǶÈÀ´½²£¬³ä·Ö¶ø²»¹ý·ÖʹÓÃÓ²¼þ×ÊÔ´£¬ºÏÀíµ÷ÕûJVM(²Ù×÷ϵͳ¡¢ÐéÄâ»ú)ÒÔ¼°ºÏÀíʹÓÃJDK°ü(ÓïÑÔÌṩµÄºËÐÄ¿â)Êǵ÷ÓŵÄÈý´óÓÐЧԭÔò£¬µ÷ÓÅûÓС°Òøµ¯¡±£¬½áºÏϵͳÏÖ×´ºÍ¶à³¢ÊÔ²»Í¬µÄµ÷ÓŲßÂÔÊÇÕÒµ½ºÏÊʵĵ÷ÓÅ·½·¨µÄΨһ;¾¶¡£

²é¿´ÊÇ·ñÓнø³Ì±»ÏµÍ³¸økillµôÁË:

  dmesg | grep  -i oom
cat /var/log/messages
sudo grep oom /var/log/messages
sudo less /var/log/messages
   
2119 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ