摘要:什么是內(nèi)存溢出內(nèi)存溢出是指,程序創(chuàng)建對象需要內(nèi)存,但是卻沒有內(nèi)存可用了,內(nèi)存就溢出了。使用命令查看個數(shù)輸入后,按診斷是文件在服務(wù)端沒讀取到,還是內(nèi)存溢出。無耐,阿里云學(xué)生機(jī)配置不好,只能稍微修改一點(diǎn),再將文件切割為小文件上傳了參數(shù)請參考
1、什么是內(nèi)存泄漏
內(nèi)存泄漏是指,有未被釋放的java對象,一直停留在內(nèi)存中。GCRoot 無法追蹤到此對象,導(dǎo)致此對象無法被回收。
2、什么是內(nèi)存溢出
內(nèi)存溢出是指,java程序創(chuàng)建對象需要內(nèi)存,但是卻沒有內(nèi)存可用了,內(nèi)存就溢出了。
溢出:從字面理解,桶不夠裝,水溢出了
3、當(dāng)時的環(huán)境:
打包成jar后,直接 運(yùn)行 java -jar xx.jar。默認(rèn)的jvm 運(yùn)行參數(shù) -Xms 。 因此給jvm分配的內(nèi)存比較小。然后,當(dāng)時上傳了1個有10W條的數(shù)據(jù)的excel插入到數(shù)據(jù)庫。結(jié)果就是,運(yùn)行了幾分鐘,用top命令查看,java 的 cpu使用率為 99%。結(jié)果就是程序直接報錯。
4、當(dāng)時情況
1、當(dāng)時不清楚自己服務(wù)器的配置情況(阿里云學(xué)生機(jī))
2、在本地測試好好的,在服務(wù)器端就不行了,懷疑是文件沒上傳,懷疑內(nèi)存溢出
5、解決過程
1、先查看服務(wù)器配置
①、使用free -h 查看服務(wù)器內(nèi)存。
②、使用top 命令查看 cpu 個數(shù)
輸入top 后, 按 1
2、診斷是文件在服務(wù)端沒讀取到,還是內(nèi)存溢出。
①上傳小量的數(shù)據(jù),發(fā)現(xiàn)上傳成功,也就是是內(nèi)存不大夠
②使用top 命令。 客戶端上傳大文件。使用top命令時,發(fā)現(xiàn)上傳后,jvm 的cpu 使用率 直接飆到 99%。內(nèi)存從5% 飆到 35%。最后客戶端直接報錯
3、設(shè)置 jvm 的啟動參數(shù)
-Xms : 初始堆大小(堆在java中是用于給對象分配內(nèi)存的) -Xmx : 最大堆大小 jcmd [pid] VM.flags
①查看 jvm 啟動參數(shù),看是否設(shè)置小了
jcmd [pid] VM.flags
②發(fā)現(xiàn)確實是設(shè)置下小了,重新設(shè)置,并啟動
nohup java -Xms512m -Xmx512m -jar xx.jar &
最后的結(jié)果就是,程序運(yùn)行稍微快了,之前上傳1000條左右的數(shù)據(jù)都很慢,現(xiàn)在就快很多了
總結(jié):
原本是想著能不能通過把jvm的啟動參數(shù)設(shè)置大一點(diǎn),進(jìn)而來支持10W條數(shù)據(jù)的上傳。無耐,阿里云學(xué)生機(jī)配置不好,只能稍微修改一點(diǎn),再將文件切割為小文件上傳了!
jvm參數(shù)請參考: https://segmentfault.com/a/11...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/71595.html
摘要:現(xiàn)象登入生產(chǎn)環(huán)境,使用命令因為這時候并沒有打的,所以只能觀察現(xiàn)象。其他的可以根據(jù)這個類推,是內(nèi)純的占用量。 前言 我們的游戲上線之初,經(jīng)常有玩家反饋卡,或者有網(wǎng)絡(luò)延遲等現(xiàn)象,造成用戶流失等現(xiàn)象,這時候我就想到是不是可能是之前的jvm配置有問題,或者存在內(nèi)存泄露等問題。 現(xiàn)象 登入生產(chǎn)環(huán)境,使用命令,因為這時候并沒有打gc的log,所以只能觀察現(xiàn)象。 jstat -gcutil 270...
摘要:首先先解讀下這個報警內(nèi)容,原因活躍線程數(shù)過多,是監(jiān)聽的端口號用來獲取虛擬機(jī)各項信息,代表著此時的線程數(shù),是設(shè)置的報警閾值。 前言 前天,一位21世紀(jì)的好好青年正在工位上默念社會主義大法好的時候,釘釘上又報警了(公司項目接入了open-faclon監(jiān)控,指標(biāo)不正常會報警給釘釘?shù)臋C(jī)器人),無奈默默流淚揮手告別社會主義大法開始定位線上問題。 報警內(nèi)容 首先我們先來看下報警信息,為防止泄露公...
摘要:一說明當(dāng)虛擬機(jī)申請不到內(nèi)存空間的時候,會報堆內(nèi)存溢出。記錄次數(shù)不讓進(jìn)程結(jié)束,便于使用分析工具來查看內(nèi)存情況使用的版本報錯信息運(yùn)行結(jié)果表明,運(yùn)行到次時,出現(xiàn)了堆內(nèi)存溢出。 一、說明 當(dāng)虛擬機(jī)申請不到內(nèi)存空間的時候,會報堆內(nèi)存溢出: OutOfMemoryError:java heap space。 常見的原因:http://outofmemory.cn/c/java-... 我測試到時...
摘要:內(nèi)存溢出的情況就是從類加載器加載的時候開始出現(xiàn)的,內(nèi)存溢出分為兩大類和。以下舉出個內(nèi)存溢出的情況,并通過實例代碼的方式講解了是如何出現(xiàn)內(nèi)存溢出的。內(nèi)存溢出問題描述元空間的溢出,系統(tǒng)會拋出。這樣就會造成棧的內(nèi)存溢出。 導(dǎo)言: 對于java程序員來說,在虛擬機(jī)自動內(nèi)存管理機(jī)制的幫助下,不需要自己實現(xiàn)釋放內(nèi)存,不容易出現(xiàn)內(nèi)存泄漏和內(nèi)存溢出的問題,由虛擬機(jī)管理內(nèi)存這一切看起來非常美好,但是一旦...
摘要:內(nèi)存溢出分配的內(nèi)存空間超過系統(tǒng)內(nèi)存。內(nèi)存泄漏的原因分析由大塊組成堆,棧,本地方法棧,程序計數(shù)器,方法區(qū)。內(nèi)存溢出的原因分析內(nèi)存溢出是由于沒被引用的對象垃圾過多造成沒有及時回收,造成的內(nèi)存溢出。小結(jié)棧內(nèi)存溢出程序所要求的棧深度過大導(dǎo)致。 showImg(https://segmentfault.com/img/bVbweuq?w=563&h=300); 前言:JVM中除了程序計數(shù)器,其他...
閱讀 3758·2021-11-23 09:51
閱讀 2063·2021-11-16 11:42
閱讀 3372·2021-11-08 13:20
閱讀 1166·2019-08-30 15:55
閱讀 2265·2019-08-30 10:59
閱讀 1313·2019-08-29 14:04
閱讀 1121·2019-08-29 12:41
閱讀 2243·2019-08-26 12:22