회사에서 메일 서비스 운영 중 원문 조회 시 CPU가 급격하게 올라가고 조회하는데 오랜 시간이 걸리는 성능 문제가 발생하였다.
AS-IS
public InputStream getFileInputStream(MessageDto.Search search) {
try {
File file = getFile(search);
return new FileInputStream(file);
} catch (IOException e) {
...
}
}
애플리케이션에서 코드를 조회하는 로직을 확인했을 때, FileInputStream 으로 매번 직접 파일 시스템에 접근하여 파일을 읽어오고 있었다.
TO-BE
파일 시스템에 매번 접근하여 파일을 읽게되면 I/O 접근이 많아 CPU 사용량이 높아지고 성능이 늦어 질 수 있기 때문에, 파일을 읽어 올때 여러 바이트를 읽어 오는 BufferedInputStream (DEFAULT_BUFFER_SIZE = 8192)을 적용하여 I/O 접근을 줄여 CPU 사용량을 낮췄다. 또한, CPU 사용량을 낮춤으로 성능을 향상시킬 수 있었다.
public InputStream getFileInputStream(MessageDto.Search search) {
try {
File file = getFile(search);
return new BufferedInputStream(new FileInputStream(file));
} catch (IOException e) {
...
}
}
FileInputStream vs BufferedInputStream
'ETC' 카테고리의 다른 글
메모리 누수 분석 (0) | 2024.07.28 |
---|---|
센드 메일서버 구현 (0) | 2019.02.27 |
마스터 네임서버 구축 (0) | 2019.02.26 |