亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1408 | 回復(fù): 0
打印 上一主題 下一主題

Java EE 常見性能問題解決手冊(1) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-08-06 23:21 |只看該作者 |倒序瀏覽
[color="#02368d"]Java EE 常見性能問題解決手冊(1)
引自:http://blog.chinaunix.net/u/10516/showart_1003386.html
這篇文章,是PRO JAVA EE 5 Performance Management and Optimization 的一個章節(jié),作者Steven Haines分享了他在調(diào)優(yōu)企業(yè)級JAVA應(yīng)用時所遇到的常見問題。
  Java
EE(Java企業(yè)開發(fā)平臺)應(yīng)用程序,無論應(yīng)用程序服務(wù)器如何部署,所面對的一系列問題大致相同。作為一個JAVAEE問題解決專家,我曾經(jīng)面對過眾多
的環(huán)境同時也寫了不少常見問題的觀察報告。在這方面,我覺得我很象一個汽車修理工人:你告訴修理工人發(fā)動機有聲音,他就會詢問你一系列的問題,幫你回憶發(fā)
動機運行的情形。從這些信息中,他尋找到可能引起問題的原因。
  眾多解決問題的方法思路基本相同,第一天我同要解決問題的客戶接觸,接觸的時候,我會尋找已經(jīng)出現(xiàn)的問題以及造成的負(fù)面的影響。了解應(yīng)用程序的
體系結(jié)構(gòu)和問題表現(xiàn)出的癥狀,這些工作很夠很大程度上提高我解決問題的幾率。在這一節(jié),我分享我在這個領(lǐng)域遇過的常見問題和他們的癥狀。希望這篇文章能成
為你JAVAEE的故障檢測手冊。
  內(nèi)存溢出錯誤
  最常見的折磨著企業(yè)級應(yīng)用程序的錯誤是讓人恐懼的outofmemoryError(內(nèi)存溢出錯誤)
  這個錯誤引起下面這些典型的癥狀:
  •   ----應(yīng)用服務(wù)器崩潰
  •   ----性能下降
  •   ----一個看起來好像無法結(jié)束的死循環(huán)在重復(fù)不斷的執(zhí)行垃圾收集,它會導(dǎo)致程序停止運行,并且經(jīng)常導(dǎo)致應(yīng)用服務(wù)器崩潰

  不管癥狀是什么,如果你想讓程序恢復(fù)正常運行,你一般都需要重新啟動應(yīng)用服務(wù)器。
  引發(fā)out-of-memory 錯誤的原因
  在你打算解決out-of-memory 錯誤之前,首先了解為什么會引發(fā)這個錯誤對你有很大的幫助。如果JVM里運行的程序,
它的內(nèi)存堆和持久存儲區(qū)域的都滿了,這個時候程序還想創(chuàng)建對象實例的話,垃圾收集器就會啟動,試圖釋放足夠的內(nèi)存來創(chuàng)建這個對象。這個時候如果垃圾收集器
沒有能力釋放出足夠的內(nèi)存,它就會拋出OutOfMemoryError內(nèi)存溢出錯誤。
  Out-of-memory錯誤一般是JAVA內(nèi)存泄漏引起的;貞浬厦嫠懻摰膬(nèi)容,內(nèi)存泄漏的原因是一個對象雖然不被使用了,但是依然還有
對象引用他。當(dāng)一個對象不再被使用時,但是依然有一個或多個對象引用這個對象,因此垃圾收集器就不會釋放它所占據(jù)的內(nèi)存。這塊內(nèi)存就被占用了,堆中也就少
了塊可用的空間。在WEB
REQUESTS中這種類型的的內(nèi)存泄漏很典型,一兩個內(nèi)存對象的泄漏可能不會導(dǎo)致程序服務(wù)器的崩潰,但是10000或者20000個就可能會導(dǎo)致這個惡
果。而且,大多數(shù)這些泄漏的對象并不是象DOUBLE或者INTEGER這樣的簡單對象,而可能是存在于堆中一系列相關(guān)的對象。例如,你可能在不經(jīng)意間引
用了一個Person對象,但是這個對象包含一個Profile對象,此對象還包含了許多擁有一系列數(shù)據(jù)的PerformanceReview對象。這樣
不只是丟失了那個Person對象所占據(jù)的100 bytes的內(nèi)存,你丟失了這一系列相關(guān)對象所占據(jù)的內(nèi)存空間,可能是高達(dá)500KB甚至更多。
  為了尋找這個問題的真正根源,你需要判斷是內(nèi)存泄漏還是以O(shè)utOfMemoryError形式出現(xiàn)的其他一些故障。我使用以下2種方法來判斷:
  •   ----深入分析內(nèi)存數(shù)據(jù)
  •   ----觀察堆的增長方式

  不同JVM(JAVA虛擬機)的調(diào)整程序的運作方式是不相同的,例如SUN和IBM的JVM,但都有相同的的地方。
  SUN JVM的內(nèi)存管理方式
  SUN的JVM是類似人類家族,也就是在一個地方創(chuàng)建對象,在它長期占據(jù)空間之前給它多次死亡的機會。
  SUN JVM會劃分為:
  •   1 年輕的一代(Young generation),包括EDEN和2個幸存者空間(出發(fā)地和目的地the From space and the To space)
  •   2 老一代(Old generation)
  •   3 永久的一代(Permanent generation)

圖1 解釋了SUN 堆的家族和空間的詳細(xì)分類

  對象在EDEN出生就是被創(chuàng)建,當(dāng)EDEN滿了的時候,垃圾收集器就把所有在EDEN中的對象掃描一次,把所有有效的對象拷貝到第一個幸存者空
間,同時把無效的對象所占用的空間釋放。當(dāng)EDEN再次變滿了的時候,就啟動移動程序把EDEN中有效的對象拷貝到第二個幸存者空間,同時,也將第一個幸
存者空間中的有效對象拷貝到第二個幸存者空間。如果填充到第二個生存者空間中的有效對象被第一個生存者空間或EDEN中的對象引用,那么這些對象就是長期
存在的(也就是說,他們被拷貝到老一代)。若垃圾收集器依據(jù)這種小幅度的調(diào)整收集(minor
collection)不能找出足夠的空間,就是象這樣的拷貝收集(copy
collection),就運行大幅度的收集,就是讓所有的東西停止(stop-the-world
collection)。運行這個大幅度的調(diào)整收集時,垃圾收集器就停止所有在堆中運行的線程并執(zhí)行清除動作(mark-and-sweep
collection),把新一代空間釋放空并準(zhǔn)備重啟程序。
  圖2和圖3展示的是了小幅度收集如何運行

  圖2。對象在EDEN被創(chuàng)建一直到這個空間變滿。

  圖3。處理的順序十分重要:垃圾收集器首先掃描EDEN和生存者空間,這就保證了占據(jù)空間的對象有足夠的機會證明自己是有效的。


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/24475/showart_1111138.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP