1. 程式人生 > >64位Linux下JVM記憶體調設遇到GC問題的備忘

64位Linux下JVM記憶體調設遇到GC問題的備忘

問題:jar提交到64位的linux環境中執行,由於檔案過大,5G左右,發現數據一致匯入不了,於是設定了JVM記憶體,執行命令如下:

java  -Xmx10240m -jar vip.jar

結果爆出GC錯誤:
java.lang.OutOfMemoryError: GC overhead limit exceeded

分析:

官網上對該錯誤的說明:

The concurrent collector will throw an OutOfMemoryError if too much time is being spent in garbage collection: if more than 98% of the total time is spent in garbage collection and less than 2% of the heap is recovered, an OutOfMemoryError will be thrown. This feature is designed to prevent applications from running for an extended period of time while making little or no progress because the heap is too small. If necessary, this feature can be disabled by adding the option-XX:-UseGCOverheadLimitto the command line.

在JDK_1.7.0_60版本中,JVM預設啟動的時候-XX:+UseGCOverheadLimit,即啟用了該特性。這其實是JVM的一種推斷,如果垃圾回收耗費了98%的時間,但是回收的記憶體還不到2%,那麼JVM會認為即將發生OOM,讓程式提前結束。可以使用-XX:-UseGCOverheadLimit,關掉這個特性。

執行程式加了這個設定,如下:

java -XX:-UseGCOverheadLimit -Xmx10240m -jar vip.jar

有必要總結下JVM記憶體調優和JVM引數設定:

-server//伺服器模式
-Xmx2g //JVM最大允許分配的堆記憶體,按需分配
-Xms2g //JVM初始分配的堆記憶體,一般和Xmx配置成一樣以避免每次gc後JVM重新分配記憶體。
-Xmn256m //年輕代記憶體大小,整個JVM記憶體=年輕代 + 年老代 + 持久代
-XX:PermSize=128m //持久代記憶體大小
-Xss256k //設定每個執行緒的堆疊大小
-XX:+DisableExplicitGC //忽略手動呼叫GC, System.gc()的呼叫就會變成一個空呼叫,完全不觸發GC
-XX:+UseConcMarkSweepGC //併發標記清除(CMS)收集器
-XX:+CMSParallelRemarkEnabled //降低標記停頓
-XX:+UseCMSCompactAtFullCollection //在FULL GC的時候對年老代的壓縮
-XX:LargePageSizeInBytes=128m //記憶體頁的大小
-XX:+UseFastAccessorMethods //原始型別的快速優化
-XX:+UseCMSInitiatingOccupancyOnly //使用手動定義初始化定義開始CMS收集
-XX:CMSInitiatingOccupancyFraction=70 //使用cms作為垃圾回收使用70%後開始CMS收集

JVM引數大全參考:http://www.blogjava.net/bitbit/archive/2009/11/30/304247.html

後續又爆出錯誤:

java.lang.OutOfMemoryError: Java heap space 

增加JVM引數設定:
java -XX:-UseGCOverheadLimit -Xmx10240m -Xms10240m -jar vip.jar

最好先執行下:
ulimit -c unlimited


相關推薦

64LinuxJVM記憶體調遇到GC問題的

問題:jar提交到64位的linux環境中執行,由於檔案過大,5G左右,發現數據一致匯入不了,於是設定了JVM記憶體,執行命令如下: java -Xmx10240m -jar vip.jar 結果爆出GC錯誤: java.lang.OutOfMemoryError:

64Linux安裝mysql-5.7.13-linux-glibc2.5-x86_64

原文地址:http://www.cnblogs.com/gaojupeng/p/5727069.html  從官網下載 mysql-5.7.13-linux-glibc2.5-x86_64.tar.gz 經測試, 本文還適用於如下版本:  mysql-5.7.

64linuxeclipseADT不生成R.java檔案的終極解決方案

最近嘗試在linux下搭建android開發環境。下了個64位的adt-bundle,下載好sdk後,發現新建專案時壓根兒就不生成R.java檔案。然後我是了N多種方法,比如說clean projec

lvm2.2.02.85在64linux的安裝問題

實驗環境:centOS5.6 final 64位; 自帶lvm2(LVM版本2.02.74,lib版本1.02.64) 目的:      在系統中安裝上lvm2.2.02.85並測試功能 遇到問題:./configure && make &&

語言 php 在64linux imagepng()無法生成圖片

http://zhidao.baidu.com/link?url=ynvyNg6GzK8_f2XOPYTDRhFPlLu3o8oLwejb8gHoPK6wHdeVVof8WN-lVOxEm9_4f9XDeOuK67Fcie_7QXUI3LWsjHxRtUFcmrqK1bR2

32的fortran函式庫在64Linux編譯及使用的方法

      最近一直在使用一個數值函式庫。為了嘗試64位的精度,花了整夜折騰出些東西。       函式庫在32位Fedora下使用時,文件提供的例程的呼叫的都是以靜態庫方式呼叫的,使用g95編譯後,用ar 工具整理到了一個.a檔案。在64位的Fedora 13中,使用64位

Linux清除快取 drop_caches,sysctl(

1. 用命令 free -m 檢視一下記憶體的使用情況:然後清除快取後再來檢視一下記憶體的使用情況:前後對比可發現,快取由之前的110M縮小到了25M,效果比較明顯。2. 下面說一下 drop_caches:清空 pagecache:syncecho 1 > /proc

解決VMware64Linux系統不支援全虛擬化(VMX)

一、前提: cpu支援Inter VT-X或AMD虛擬化技術,具體參考官網說明。 二、問題描述: 物理機下,VMware Workstation能安裝64位CentOS系統,處理器Inter i3 M390,且支援Inter VT-X虛擬化技術,物理機BIOS中已開啟Inter虛擬化開關(自己

64 linux作業系統如何編譯和執行32原始碼

解決辦法:  1、執行命令: yum whatprovides libstdc++.so.6   然後會提示哪個安裝包有這個庫檔案如下:   [[email protected] ~]# yum whatprovides libstdc++.so.6  Loaded plugins: aliases

C/C++3264編譯器,各資料型別和指標變數分配記憶體大小

1. 32位定址空間 資料型別 佔用位元組數(位元組) 說明 資料型別 佔用位元組數(位元組) 說明 Bool 1 char 1

linux 3264系統資料型別長度的區別

近日在centos下用c寫東西,這個程式的服務端執行在64位的centos下,客戶端有可能是32機,也有可能是64位的。 為了保證資料傳輸的一致性制定了一套協議,用struct實現。為了保證輸出過程中,資料的完整性,特別針對系統的不同對struct裡變數的型別進行了優化。為了

64系統程序的記憶體佈局

環境 作業系統:ubuntu15.04 實體記憶體:4G 測試程式 #include<stdio.h> #include<stdlib.h> int a; int b=1; main() { int

64系統,一個32的程式究竟可以申請到多少記憶體,4GB還是更多?

前言: cpu的位是指一次性可處理的資料量是多少,1位元組=8位,32位處理器可以一次性處理4個位元組的資料量,依次類推。32位作業系統針對的32位的CPU設計。64位作業系統針對的64位的CPU設計。作業系統只是硬體和應用軟體中間的一個平臺。我們的CPU從原來的8位,16

【轉載】64Win7成功安裝64的Oracle、32的InstantClient和PLSQL Developer

註銷 五步 ldb 需要 windows inf 目錄 登錄 class 感謝原作者,原文鏈接:https://wenku.baidu.com/view/433d0b544a7302768f993926.html 經實際安裝操作,通過以下步驟能夠成功地把Oracle安裝到

Win7 (64安裝RabbitMQ

消息隊列RabbitMQ依賴erlang,所以先安裝erlang,然後再安裝RabbitMQ;下載RabbitMQ,下載地址:http://www.rabbitmq.com erlang,下載地址:http://www.erlang.org/ 先安裝erlang,雙擊erlang的安裝文件即可,然後配置

Linux環境變量

... 功能 not found 名稱 權限控制 title 每一個 顯示 默認 Linux下環境變量設置 1、在Windows 系統下,很多軟件安裝都需要配置環境變量,比如 安裝 jdk ,如果不配置環境變量,在非軟件安裝的目錄下運

64系統,指向int型的指針占的內存空間多大?

span amp eof 指針變量 一級指針 class inux turn ret 不廢話,請看代碼演示如下: 註意使用的操作系統的位數,不同位數的操作系統,結果不一樣! 我是用的是64位的操作系統! linux下示例代碼如下: 1 #include <stdi

Windows 64 系統 Python 環境的搭建

for libs ref soft strong 註冊表 -- cnblogs %20 Windows 64 位開發環境 註意:本教程適用於 Windows 7 64 位操作系統 及 Windows 10 64 位操作系統,其他系統尚未經過校驗。 安裝 IDE PyCh

windows(64使用curl安裝

AD lock -- 窗口 官網 .html idt eight com Curl命令可以通過命令行的方式,執行Http請求。在Elasticsearch中有使用的場景,因此這裏研究下如何在windows下執行curl命令。 工具下載   在官網處下載工具包:h

64系統註冊32dll文件

共存 dll文件 支持 不兼容 class syswow64 txt clas 復制 64位系統下註冊32位dll文件 在64位系統裏註冊32位軟件所需的一些dll會提示不兼容,大概因為32 位進程不能加載64位Dll,64位進程也不可以加載32的導致。 若要支持的32