一、項目背景
我們的項目是一款致力于解決大學(xué)課堂教學(xué)效率低下、教師學(xué)生課堂教學(xué)互動性不強這一現(xiàn)實問題而設(shè)計的獨立的課堂教學(xué)輔助系統(tǒng)。系統(tǒng)主體分為兩個相互關(guān)聯(lián)的軟件。E課的pc端的用戶是大學(xué)授課教師,E課APP是服務(wù)學(xué)生的Android端軟件?!癊課”軟件PC端的用戶是大學(xué)授課教師,基于授課需要,教師需要考察學(xué)生出勤情況,了解學(xué)生課堂實時學(xué)習(xí)情況,展示相關(guān)教學(xué)資料?!癊課”APP的用戶是學(xué)生,學(xué)生在合適的時間使用手機軟件與教師進行交互,提高課堂效率與課堂互動性。
“E課”是一項獨立的軟件,而且全部內(nèi)容自含。在“E課”智能手機應(yīng)用程序中,教師可通過個人郵箱和密碼登錄系統(tǒng),學(xué)生可通過本人學(xué)號和加密碼登錄系統(tǒng)。顯示頁面所需要的數(shù)據(jù)全部從數(shù)據(jù)庫中讀取,以APP界面或者網(wǎng)頁的形式列在頁面上供使用者瀏覽?!癊課”可實現(xiàn)課表查詢、掃描二維碼即時簽到、課程檢測、“我要當(dāng)學(xué)霸”、在線課程中心等主要功能以及績點查詢、成績查詢等輔助功能,實現(xiàn)以新媒體輔助教學(xué)的方式提高課堂效率。
系統(tǒng)架構(gòu)圖如下:
學(xué)生用戶端主要功能有:加入課程、簽到、課堂檢測、文件下載、課堂筆記、個人簽到記錄等核心功能,還有大學(xué)新聞公告展示推送、學(xué)生課表自動導(dǎo)入及展示、個人信息、成績查詢等輔助功能。PC端功能總覽圖如下:
二、所遇到的挑戰(zhàn)
本項目在測試及小范圍用戶使用的過程中,發(fā)現(xiàn)了會存在OOM 的問題。 OOM,全稱“Out Of Memory”,翻譯成中文就是“內(nèi)存用完了”,即會拋出java.lang.OutOfMemoryError的異常。看下關(guān)于的官方說明: Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. 意思就是說,當(dāng)JVM因為沒有足夠的內(nèi)存來為對象分配空間并且垃圾回收器也已經(jīng)沒有空間可回收時,就會拋出這個error(注:非exception,因為這個問題已經(jīng)嚴重到不足以被應(yīng)用處理)。
三、解決問題的步驟
首先,我們先進行問題的排查,因為發(fā)生OOM的可能性和原因有很多。但無外乎底層原因就兩點,一種是分配得少:比如虛擬機本身可使用的內(nèi)存(一般通過啟動時的VM參數(shù)指定)太少;另一種是應(yīng)用用的太多,并且用完沒釋放,浪費了。此時就會造成內(nèi)存泄露或者內(nèi)存溢出。(內(nèi)存泄露:申請使用完的內(nèi)存沒有釋放,導(dǎo)致虛擬機不能再次使用該內(nèi)存,此時這段內(nèi)存就泄露了,因為申請者不用了,而又不能被虛擬機分配給別人用。內(nèi)存溢出:申請的內(nèi)存超出了JVM能提供的內(nèi)存大小,此時稱之為溢出。)
常用的工具有常用的工具有:
1)mat: eclipse memory analyzer, 基于eclipse RCP的內(nèi)存分析工具。詳細信息參見:http://www.eclipse.org/mat/,推薦使用。 2)jhat:JDK自帶的java heap analyze tool,可以將堆中的對象以html的形式顯示出來,包括對象的數(shù)量,大小等等,并支持對象查詢語言O(shè)QL,分析相關(guān)的應(yīng)用后,可以通過http://localhost:7000來訪問分析結(jié)果。不推薦使用,因為在實際的排查過程中,一般是先在生產(chǎn)環(huán)境 dump出文件來,然后拉到自己的開發(fā)機器上分析,所以,不如采用高級的分析工具比如前面的mat來的高效。
進行了幾輪的測試與排查,首先發(fā)現(xiàn)是-Xmx 參數(shù)過低,調(diào)高之后便解決了部分問題;后發(fā)現(xiàn)數(shù)據(jù)庫查詢邏輯有些問題,一次性查詢了數(shù)據(jù)庫全部結(jié)果,而沒有做結(jié)果數(shù)限制,所以當(dāng)測試的數(shù)據(jù)庫信息量過大的時候,也會出現(xiàn)OOM的問題,于是我們嘗試從邏輯層面優(yōu)化了數(shù)據(jù)庫查詢機制,從而又更高層面地減少了OOM問題的發(fā)生。
因為發(fā)現(xiàn)了軟件潛藏的可能性問題,加強了我們的監(jiān)控維護意識,畢竟測試只能解決部分和少量非常明顯的問題,但是在實際上線過程中,突然爆發(fā)出來的問題可能會是毀滅性的,于是我們決定要完善監(jiān)控體系。只有這樣,才能更好的服務(wù)于用戶,盡快發(fā)現(xiàn)問題,并解決例如適配性、用戶體驗、流量使用、穩(wěn)定性等問題。我們調(diào)研了幾個常用的用戶反饋平臺1) 美洽,基于HTML5開發(fā),只需在IOS/Android支持H5的瀏覽器中打開即可,無需安裝任何軟件程序,代碼植入,一步到位,簡化溝通流程。2) Udesk:支持Android、IOS以及APIcloud三大平臺,可以對用戶反饋的數(shù)據(jù)做統(tǒng)計分析,并展示結(jié)果。3) Freshdesk,致力于中小企業(yè)網(wǎng)站在線客服技術(shù)支持的網(wǎng)站,提供中小企業(yè)網(wǎng)站的在線服務(wù)質(zhì)量和用戶體驗度。在調(diào)研過程中,我們偶然接觸到了友盟+ 應(yīng)用性能監(jiān)控平臺 U-APM,U-APM應(yīng)用性能監(jiān)控平臺提供實時、可靠、全面的應(yīng)用崩潰、ANR、自定義異常等捕獲能力,支持多場景、多通道智能告警監(jiān)控,高效還原崩潰用戶的訪問路徑和業(yè)務(wù)現(xiàn)場,縮短故障排查時間。其提供從發(fā)現(xiàn)問題---還原問題---解決問題----驗收的完整閉環(huán)。完美符合我們的需求和預(yù)期。
項目總結(jié)
我們的項目最終定位在“適配普通大學(xué)課堂教學(xué)的教學(xué)輔助軟件”,旨在提高大學(xué)課堂效率和教學(xué)互動性,在功能層面上盡量做到簡潔,在開發(fā)層面盡量做到統(tǒng)一規(guī)范。PC端和Android端均符合了MVC軟件設(shè)計模式,具有了較好的可移植性,模塊之間高度解耦,可適應(yīng)各種類型的再開發(fā)。但在APP測試期間出現(xiàn)了OOM的問題,于是我們通過調(diào)高-Xmx參數(shù),并修改了數(shù)據(jù)庫查詢邏輯,優(yōu)化代碼結(jié)構(gòu),同時完善監(jiān)控體系的方法解決優(yōu)化了這個問題,并且完善了監(jiān)控體系對后續(xù)未來可能會發(fā)生的問題提供了雙重保障。
評論前必須登錄!
注冊