1.前言
離線任務(wù)在運(yùn)行完成后任務(wù)的詳細(xì)記錄同步到Timeline Server中用于長時間存儲,當(dāng)訪問Timeline Server UI時發(fā)現(xiàn)記錄的應(yīng)用任務(wù)名稱、任務(wù)類型、隊(duì)列等為null導(dǎo)致我們無法進(jìn)行任務(wù)治理、性能分析等工作。
2.分析
【1】訪問UI出現(xiàn)為null的現(xiàn)象懷疑是底層Leveldb數(shù)據(jù)損壞導(dǎo)致。
image.png
【2】編寫代碼讀取底層的Leveldb數(shù)據(jù)驗(yàn)證是否數(shù)據(jù)損壞
public class LevelDBTest {
public static void main(String []args) throws IOException {
JniDBFactory factory = new JniDBFactory();
DB db = factory.open(new File("../timeline/leveldb-timeline-store/entity-ldb.2024-06-07-06"),new Options());
DBIterator dbIterator = db.iterator();
dbIterator.seekToFirst();
while (dbIterator.hasNext()) {
Map.Entry<byte[], byte[]> entry = dbIterator.next();
if(new String(entry.getKey()).contains("60799")){
System.out.println(new String(entry.getKey()));
System.out.println(new String(entry.getValue()));
break;
}
}
dbIterator.close();
db.close();
}
}
【3】結(jié)果輸出后發(fā)現(xiàn)底層存儲沒有相關(guān)的字段記錄所以存儲沒有問題。
image.png

image.png

image.png

image.png
3.總結(jié)
有時候通過日志、源碼并不能很快的定位的問題原因,我們可以通過配置遠(yuǎn)程DEBUG的方式進(jìn)行代碼調(diào)試來定位原因,如擔(dān)心影響生產(chǎn)環(huán)境上的任務(wù)可以在測試環(huán)境進(jìn)行。