시스템에는 많은 프로세스가 존재하며, 프로세스는 많든 적든 시스템자원을 사용한다.
시스템자원(Cpu,Memory,Disk 등)을 사용하는 프로세스는 실행중인 프로세스일수도 있고, 휴지상태의 프로세스일수도 있다.
ulimit명령어를 이용하여 프로세스들에 대한 시스템자원사용을 제한할수 있다. 하지만 ulimit명령어를 사용하면 커널의 성능과 기능에 막대한 영향을 주게 되므로 사용시에 주의해야 한다.
> ulimit명령어로 설정가능한 시스템자원 제한사항
1. 코어(core)파일 생성시 최대 크기 제한
2. 쉘에 의해 만들어질 수 있는 파일의 최대크기 제한
3. 한 사용자에게 허용 가능한 프로세스(user processes)의 최대 개수 제한
4. 쉘에 허용 가능한 가상메모리(virtual memory)의 최대량 제한
5. 오픈할수 있는 파일기술자(FD: file descriptor)의 최대 개수 제한
6. 스택크기(stack size)의 최대크기 제한
7. 초(second)당 사용 가능한 CPU의 최대 허용 시간(cpu time) 제한
8. 메모리에 상주(resident set size)할수 있는 최대 크기 제한
9. 512byte 블록단위로 파이프크기(pipe size)설정
10. 프로세스 데이터세그먼트(process data segment)의 최대 크기 제한
#ulimit명령어의 사용은 운영체제(kernel)의 실행에 결정적인 요인으로 작용할수도 있기 대문에 설정할 때에는 시스템 상황을 정확하게 파악하여 설정결과에 대해서 미리 예측한후에 사용해야 한다.
-. 하드웨어적인 제한(H)과 소프트웨어적인 제한(S)
하드웨어적인 제한이란, 일반적으로 소프트웨어적인 제한이 넘어갈수 없는 제한을 말한다.
소프트웨어적인 제한이란, 사용자가 일반적으로 제한사항을 지정하여 지정하여 자원사용을 제한하는 것을 말하며,위에서도 말했지만 소프트웨어적인제한은 하드웨어적인제한을 넘을수가 없다.
시스템의 하드웨어적인 제한사항을 모두 보려면 "-Ha"옵션을 사용하면 되며,
소프트웨어적인 제한사항을 모두 확인하려면 "-Sa"옵션을 사용하면 된다.
"H", "S"를 주지 않고 "-a"옵션만을 사용하면 소프트웨어적인 제한사항을 보여준다.
> 현재 시스템자원의 제한사항 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@os1 ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 8191
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 8191
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
|
> Software 및 Hardware적인 시스템자원사용제한 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@os1 ~]# ulimit -Sa
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 8191
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 8191
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
|
> Hardware적인 시스템자원사용제한 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@os1 ~]# ulimit -Ha
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 8191
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 8191
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
|
위에서도 볼수 있듯이, 아직 시스템자원제한을 별도로 설정하지 않았기 때문에
software적인 제한과 hardware적인 제한이 다르지 않음을 알수 있다.
각 항목을 뒤에 있는 옵션을 사용하여 각 항목값을 변경할수 있다.
ex) core file size를 5로 변경할경우
ulimit -c 5
> 시스템 자원사용 제한 설정하기
설정하고자 하는 옵션값뒤에 제한값을 주지 않으면 현재 값을 출력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
>stack의 최대크기 제한(-s)
[root@os1 ~]# ulimit -s
10240
[root@os1 ~]# ulimit -s 4096
[root@os1 ~]# ulimit -a | grep stack
stack size (kbytes, -s) 4096
>CPU의 초당사용시간 제한(-t)
[root@os1 ~]# ulimit -t
unlimited
[root@os1 ~]# ulimit -t 10
[root@os1 ~]# ulimit -a | grep cpu
cpu time (seconds, -t) 10
>메모리에 상주가능한 최대크기 제한(-m)
[root@os1 ~]# ulimit -m
unlimited
[root@os1 ~]# ulimit -m 5000
[root@os1 ~]# ulimit -a | grep 'max memory size'
max memory size (kbytes, -m) 5000
|
> core파일이 생성될때의 최대크기 제한(-c)
core파일이란, 실행된 프로세스나 프로그램이 충돌할 때에 발생하는 메모리의 실제내용을 dump한 자동생성파일이다.
이 파일에는 문제가 발생한 시스템의 메모리내용이 그대로 저장되어 있기 때문에 전문 SE(System Engineer)들은 시스템의 이상원인을 밝혀내기 위하여 core파일을 분석한다.
1
2
3
4
5
6
7
|
[root@os1 ~]# ulimit -c
0
[root@os1 ~]# ulimit -c 200000
[root@os1 ~]# ulimit -a | grep 'core file size'
core file size (blocks, -c) 200000
# core file size의 값이 0으로 되어 있으면 코어파일이 생성되지 않도록 하는 설정이다.
|
> 특정 사용자의 사용가능한 프로세스의 최대갯수 제한(-u)
한 사용자에 의해서 생성되는 프로세스의 최대갯수를 제한할때 -u옵션을 이용하면 된다.
1
2
3
4
5
6
|
[root@os1 ~]# ulimit -u
8191
[root@os1 ~]# ulimit -u 500
[root@os1 ~]# ulimit -a | grep 'max user processes'
max user processes (-u) 500
|
1
2
3
4
5
6
|
[root@os1 ~]# ulimit -v
unlimited
[root@os1 ~]# ulimit -v 300000
[root@os1 ~]# ulimit -a | grep 'virtual memory'
virtual memory (kbytes, -v) 300000
|
FD(File Descriptor)란, 운영체제에서 파일을 사용할때 각 파일에 대한 정보를 유지하는 정보파일을 말한다.
모든 프로세스는 기본적으로 3개의 FD를 갖는다.
0:표준입력(stdin)
1:표준출력(stdout)
2:표준에러(stderr)
이후 파일을 열면 3번부터 할당이 되는것이다.
같은 파일을 2번 열었다면 각각 열린 프로세스에 대해서 서로 다른 FD를 갖는것이다.
사용할수 있는 파일이ㅡ 갯수를 인위적으로 설정한다는 것은 시스템효율성측면에서 권할만한 것은 아니기 때문에 따로 설정하지 않는것을 좋다고 한다.
1
2
3
4
5
6
|
[root@os1 ~]# ulimit -n
1024
[root@os1 ~]# ulimit -n 4096
[root@os1 ~]# ulimit -a | grep 'open files'
open files (-n) 4096
|
※ ulimit의 설정값을 변경후 재부팅을 하게 되면 설정값은 초기화가 된다.
따라서 .bash_profile에 명령어를 설정하거나, /etc/profile파일에 설정명령어를 넣어두면 재부팅시에도 해당값이 유지가 된다.
ex) root사용자를 제외한 모든 사용자의 자원사용제한하기
모든 사용자에게 적용되기 때문에 개인 환경 설정파일이 아닌 전체에 적용되도록 /etc/profile파일을 이용함.
1
2
3
4
5
6
7
|
vi /etc/profile명령어로 파일을 연후
if [ $LOGNAME !="root"
then
ulimit -u 10 # 생성 가능한 프로세스의 수를 10개로 제한
ulimit -f 5120 #생성할수 있는 한 파일의 사이즈를 5M로 제한
fi
|
위와 같은 라인을 입력후 저장하면 root사용자를 제외한 모든 사용자의 자원사용이 제한된다.
'IT기술 > 리눅스' 카테고리의 다른 글
[linux] 리눅스 벤치마크 프로그램 목록 (0) | 2018.10.30 |
---|---|
[Tomcat] 리눅스의 톰캣 로그에서 한글깨지는 문제 해결방법 (0) | 2018.10.30 |
CentOS 7.5 tomcat 9.0 설치하기 (0) | 2018.08.23 |
centos 7.5 java 설치하기 (0) | 2018.08.23 |
CentOS 7.5 apache 2.4.34 수동 설치 / 컴파일 설치 (0) | 2018.08.17 |