★ 코어 덤프
☆ 코어 덤프 활성화 조회
ulimit -c
☆ 코어 덤프 활성화 조치
vi /etc/security/limits.conf
# 모든 사용자에 대해 core file size를 무제한으로 설정
* soft core unlimited
* hard core unlimited
저장, 로그아웃, 로그인, 재확인(조회)
☆ 임의로 덤핑
vi InfiniteLoop.java
public class InfiniteLoop {
public static void main(String[] args) {
while (true) {
System.out.println("무한 루프 도는 중...");
try {
Thread.sleep(1000); // 1초 대기 (Optional)
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
kill -11 <pid>
☆ 코어 파일의 경로 및 파일명 조회
cat /proc/sys/kernel/core_pattern
☆ 코어 파일의 경로 및 파일명 설정(임시)
echo "/tmp/core.%e.%p.%h.%t" | sudo tee /proc/sys/kernel/core_pattern
☆ 코어 파일의 경로 및 파일명 설정(영구)
vi /etc/sysctl.conf
kernel.core_pattern = /tmp/core.%e.%p.%h.%t
sudo sysctl -p
★ 파일 디스크립터
☆ 파일 디스크립터 누수 진단 ( 파일은 삭제되었지만 프로세스가 여전히 열고 있을 때, 파일/네트워크소켓/파이트 등)
lsof | grep deleted
☆ 특정 사용자에 의해 열린 파일 나열
lsof -u <username>
☆ 특정 사용자에 의해 열린 파일 개수 파악
#!/bin/bash
USERNAME=$1
USER_UID=$(id -u $USERNAME)
FILE_COUNT=0
for PID in $(ls /proc | grep -E '^[0-9]+$'); do
PROC_UID=$(stat -c '%u' /proc/$PID 2>/dev/null)
if [ "$PROC_UID" -eq "$USER_UID" ]; then
COUNT=$(ls /proc/$PID/fd 2>/dev/null | wc -l)
FILE_COUNT=$((FILE_COUNT + COUNT))
fi
done
echo "Total open files by user $USERNAME: $FILE_COUNT"
☆ 특정 프로세스의 열린 파일 디스크립터 수 확인
ls /proc/<PID>/fd | wc -l
lsof -p <PID>
☆ 모든 프로세스의 열린 파일 디스크립터 수 확인
#!/bin/bash
for pid in /proc/[0-9]*; do
echo -n "$pid: "
ls "$pid/fd" 2>/dev/null | wc -l
done
lsof | awk '{print $2}' | sort | uniq -c | sort -nr
☆ 파일 디스크립터 한도 조회
ulimit -n
☆ 파일 디스크립터 한도 조정
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 100000
저장, 로그아웃, 로그인, 재확인
★ 힙 메모리
☆ 힙메모리 요약 출력
jmap -heap <PID>
☆ JVM 프로세스 ID 확인
jps -l
☆ JVM의 가비지컬렉션(GC)통계를 모니터링
jstat -gc <PID>
☆ GC 로그 활성화
-Xlog:gc*:file=gc.log:time,uptime