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