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