JVM GC日誌解析
JVM GC日誌經常要檢查,可以提前發現問題。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
/**
create table test
(
file_name varchar2(100),
id number,
ParOldGen number,
ParOldGen_begin number,
ParOldGen_end number,
PermGen number,
PermGen_begin number,
PermGen_end number,
gc_time number
);
select file_name,ParOldGen_begin,ParOldGen_end from
(select file_name,
row_number() over(partition by file_name order by id desc) rn,
ParOldGen_begin,
ParOldGen_end
from test) where rn=1
*/
public class ReadGCLog {
static final String driver_class = “oracle.jdbc.driver.OracleDriver”;
static final String connectionURL = “jdbc:oracle:thin:@10.10.17.16:1521:orcl”;
static final String userID = “test”;
static final String userPassword = “test”;
public static void main(String argv[]){
String path = "E:\\gc_logs";
File file = new File(path);
File[] fs = file.listFiles();
for(File filePath:fs){
if(!filePath.isDirectory()){
System.out.println("開始讀取:"+filePath);
readTxtFile(filePath.toString());
System.out.println("結束讀取:"+filePath);
}
}
}
public static void readTxtFile(String filePath){
Connection con = null;
String s_sql = "insert into test values(?,?,?,?,?,?,?,?,?)";
PreparedStatement pstmt = null;
int i=0;
try {
Class.forName (driver_class).newInstance();
con = DriverManager.getConnection(connectionURL, userID, userPassword);
pstmt = con.prepareStatement(s_sql);
con.setAutoCommit(false);
File file=new File(filePath);
InputStreamReader read = new InputStreamReader(new FileInputStream(file));
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt =null;
String[] strFileName = filePath.split("\\\\");
String fileName = strFileName[strFileName.length-1];
while((lineTxt = bufferedReader.readLine()) != null){
if(lineTxt.contains("Full GC")){
String[] str = lineTxt.split(" ");
String[] strParOldGen = str[7].replace(")]", "").replace("(", "->").split("->");
String[] strPermGen = str[10].replace(")],", "").replace("(", "->").split("->");
pstmt.setString(1, fileName);
pstmt.setInt(2, i);
pstmt.setInt(3, Integer.valueOf(strParOldGen[2].replace("K", "")));
pstmt.setInt(4, Integer.valueOf(strParOldGen[0].replace("K", "")));
pstmt.setInt(5, Integer.valueOf(strParOldGen[1].replace("K", "")));
pstmt.setInt(6, Integer.valueOf(strPermGen[2].replace("K", "")));
pstmt.setInt(7, Integer.valueOf(strPermGen[0].replace("K", "")));
pstmt.setInt(8, Integer.valueOf(strPermGen[1].replace("K", "")));
pstmt.setFloat(9, Float.valueOf(str[11]));
pstmt.addBatch();
i++;
}
}
pstmt.executeBatch();
con.commit();
read.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
if(pstmt != null){
try {
pstmt.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
pstmt = null;
}
}
if(con != null){
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
con = null;
}
}
}
}
}
相關文章
- JVM的GC日誌JVMGC
- JVM GC 日誌詳解JVMGC
- JVM小冊(1)------jstat和Parallel GC日誌JVMJSParallelGC
- JVM 輸出 GC 日誌導致 JVM 卡住,我 TM 人傻了JVMGC
- eclipse設定檢視GC日誌和如何理解GC日誌EclipseGC
- JAVA GC日誌分析JavaGC
- 曹工雜談:手把手帶你讀懂 JVM 的 gc 日誌JVMGC
- 對一次 GC日誌的分析GC
- Crash日誌解析
- 【金三銀四-JVM系列】CMS收集器與GC日誌分析定位問題詳解JVMGC
- JVM 系列文章之 Full GC 和 Minor GCJVMGC
- MySQL慢日誌全解析MySql
- JVM之GC趣解JVMGC
- 【譯】深入理解G1的GC日誌(一)GC
- monolog 日誌記錄器解析Mono
- MySQL redo與undo日誌解析MySql
- (四)Logstash收集、解析日誌方法
- iOS crash 日誌堆疊解析iOS
- JVM記憶體-GC策略JVM記憶體GC
- JVM(六)——GC 演算法JVMGC演算法
- JVM 虛擬機器 GCJVM虛擬機GC
- JVM+GC 面試題JVMGC面試題
- 聊一聊 JVM 的 GCJVMGC
- myBatis原始碼解析-日誌篇(1)MyBatis原始碼
- kafka-log日誌程式碼解析Kafka
- CloudFlare Workers 日誌管理方案全解析Cloud
- 乾貨:ANR日誌分析全面解析
- 通過helm部署EFK收集應用日誌,ingress-nginx日誌解析。應用日誌Nginx
- 【JVM第八篇--垃圾回收】GC和GC演算法JVMGC演算法
- mybatis原始碼解析-日誌介面卡MyBatis原始碼
- JVM記憶體GC的騙局JVM記憶體GC
- JVM GC 與 記憶體分配策略JVMGC記憶體
- 聊聊JVM的垃圾回收機制GCJVMGC
- 秋招乾貨 - JVM 垃圾回收(GC)JVMGC
- JVM的四種GC演算法JVMGC演算法
- 探探Java之 JVM GC與調優JavaJVMGC
- 「入門篇」初識JVM (下下) - GCJVMGC
- JVM系列(五):gc實現概要01JVMGC