리눅스는 디폴트로 한개의 프로세스 ID가 1024개의 파일을 오픈할 수 있다 (소켓포함)
아래 명령을 수행하여 pid별로 오픈하고 있는 파일수를 체크 if [ $n -gt 1 ] 를 수정하여 특정 파일 갯수 이상
오픈하는 PID를 조회할 수도 있다.
pid_file_open_ch.sh
----------------------------------------------------
#!/bin/sh
lsof -t > t1
cat t1 | while read data
do
n=` lsof -p $data |wc -l`
if [ $n -gt 1 ]
then
pname=`ps -p $data --no-heading | awk '{print $4}' `
echo -e "$pname t $data t - $nc"
echo "ea"
fi
done
참고로 리눅스는 한 개의 프로세스 ID에서 오픈할수 있는 파일갯수가 한정되어 있습니다.
default 값이 1024개입니다.
리눅스에서 파일 오픈 리미트값 보는 방법
soft 파일 오픈 limit 값 조회
# ulimit -Sn
hard 파일 오픈 limit 값 조회
# ulimit -Hn
리눅스 limit(한도)에는 두가지 종류가 있습니다.
소프트 한도는 새로운 프로그램이 생성되면 디폴트로 적용되는 한도
하드 한도는 소프트 한도에서 최대 늘릴수 있는 한도
프로세스가 열어 놓은 파일을 조회하고 Max값에 도달할 정도로 사용중이라면
열수 있는 최대 파일수 Max값 수정
프로세스가 열어놓은 파일 조회
lsof
java프로세스의 열린 파일 수(소켓포함) 조회
# ps -ef | grep java
PID 확인
# lsof -p PID | wc -l
열수있는 최대파일수 2048개로 수정 -> 리부팅하면 초기화 됨
# ulimit -n 2048
리부팅후에도 적용 방법
root 사용자의 open files개수를 4096개로 수정
/etc/security/limits.conf 에 다음 줄을 추가한후 재로그인하면 적용
root soft nofile 4096
root hard nofile 6144
특정계정이 오픈한 파일수
# lsof -u | wc - l
/usr/local/apache/logs/error.log 파일을 오픈한 계정 및 PID 조회
# lsof /usr/local/apache/logs/error.log
지정한 디렉토리를 엑세스 하고 있는 프로세스의 정보를 보여준다.
# lsof /tmp
인터넷소켓 보기
모든 네트워크 연결되어 있는 프로세스와 파일을 정보를 보여준다.
# lsof -i
211.39.134.230서버의 22번 포트로 접속한세션만 본다
# lsof -iTCP@211.39.134.230:22
지정한 데몬과 연결되어 있는 프로세스와 파일을 정보를 보여준다.
# lsof -c 데몬명
# lsof -c proftpd
* 소프트 한도
[root@vm_master etc]# ulimit -Sa
core file size (blocks) 0 # 코어파일의 최대크기
data seg size (kbytes) unlimited # 프로세스의 데이타 세그먼트 최대크기
file size (blocks) unlimited # 쉘에서 생성되는 파일일 최대크기
max locked memory (kbytes) unlimited
max memory size (kbytes) unlimited # resident set size의 최대크기(메모리 최대크기)
open files 1024 # 하나의 프로 세스당 최대 열수 있는 화일의 개수
pipe size (512 bytes) 8 # 512-바이트 블락의 파이프 크기
stack size (kbytes) 8192 # 프로세스의 스택 최대크기
cpu time (seconds) unlimited # 총 누적된 CPU시간(초)
max user processes 1024 # 단일 유저가 사용가능한 프로세스의 최대갯수
virtual memory (kbytes) unlimited # 쉘에서 사용가능한 가상 메모리의 최대용량
*하드 한도
# ulimit -Ha
[사용 방법]
ulimit [옵션] 값
-a: 모든 제한 사항을 보여준다.
-c: 최대 코어 파일 사이즈
-d: 프로세스 데이터 세그먼트의 최대 크기
-f: shell에 의해 만들어질 수 있는 파일의 최대 크기
-s: 최대 스택 크기
-p: 파이프 크기
-n: 오픈 파일의 최대수
-u: 프로세스 최대수
-v: 최대 가상메모리의 량
주의 할것은 root 로 ssh로 직접 접속할 경우 변화된것이 조회 되지 않는다.
일반계정으로 접속후 su 로 해야 한다.