flume高同時最適化-(17)cpu占有率の高い問題を解決する
1642 ワード
ブログでは、「jstack分析cpu占用高応用」を通じて、flume占用が高すぎることを発見し、コードを分析することで、デッドサイクルを発見しました.ここでは、2つのコードの違いを見てみましょう.
old:
new:
解決策も簡単で、必然的な操作である以上、10回の休眠10 sを加えると、cpuリソースを解放することができます.スレッドがまだ終了していないため、メモリリソースは解放されません.使用可能な状態です.
old:
//
if(line==null||line.trim().length()<1){
while (true){
logger.info(this.filepath+"=randomAccessFile.readLine=> line is null");
filePointer = randomAccessFile.getFilePointer();
line=randomAccessFile.readLine();
if ((line!=null && line.trim().length()>0) || fileLength <= filePointer) {
break;
}
}
}
new:
//
if(line==null||line.trim().length()<1){
int io_c = 0;
while (true){
io_c=io_c+1;
logger.info(this.filepath+"=randomAccessFile.readLine=> line is null");
filePointer = randomAccessFile.getFilePointer();
line=randomAccessFile.readLine();
if ((line!=null && line.trim().length()>0) || fileLength <= filePointer) {
break;
}
if(io_c%10==0){
try {
Thread.sleep(10000);
}catch (Exception ex){
logger.warn("Thread.sleep(10000)",ex);
}
}
}
}
解決策も簡単で、必然的な操作である以上、10回の休眠10 sを加えると、cpuリソースを解放することができます.スレッドがまだ終了していないため、メモリリソースは解放されません.使用可能な状態です.