[Linux] CPU 부하관리, 프로세스 관리
CPU 부하관리, 프로세스 관리
cpu 부하 측정하기
cpu 상태는 cpu 부하와 cpu 이용률로 파악합니다 .
- cpu 부하(load) : 최대 처리 용량 대비 cpu가 수행하는 작업량의 비를 백분율로 나타낸것입니다 . 평균 부하는 일정 시간의 시스템 활동을 나타내므로 시스템 상태를 좀더 정확히 보여주는 좋은 지표입니다 .
- cpu 이용률 (cpu utilization) : 최대 처리 용량 대비 cpu 유휴 상태가 아닌 시간의 비를 백분율을 나타낸것입니다 .
# uptime
=> 현재 시각, 최근 시스템 부팅 후 경과 시간 , 현재 로그인한 사용자 수 , 가장 중요한 지난 1분간 , 5분간 , 15 분간의 평균 부하를 보여줍니다 .
# cat /proc/cpuinfo | grep processor
=> 현재 이시스템은 듀얼 코어입니다 .
cpu 부하 관리
- 현재 uptime 결과를 보면 ( 생성한지 얼마 되지 않은 vm 이라서) 최대 용량 밑으로 사용중입니다 . 지금결과에 더 효율적으로 이용하기 위해서는 사용률으 낮은 컴퓨터들의 리소스를 통합하여 더 많은 서비스를 제공해서 투자 대비 효과를 극대화 할 수 있습니다 .
- 그 반대로 용량초과라면 , cpu 코어가 더 많은 아키텍쳐로 전환하거나 가상환경에서 vm 컨테이너를 더많이 배치하여 작업 부하를 덜 수 있습니다 ,
- 프로세스를 감시하여 불필요한 프로세스가 없는지 항상 모니터링 해야하는데 이럴 때는 top 명령어를 사용합니다 .
현재 실행중인 프로세스의 목록을 나타내고 cpu 사용률과 메모리 사용량을 나타냅니다 .
프로세스 종료
어플리케이션을 위험에 빠트리지 않고 안정적으로 프로세스를 내릴려면 systemctl 명령어를 사용하는 것이 좋습니다 .
#systemctl stop mysqld
만약 systemd 가 관리하는 프로세스가 아니라면 kill 이나 kill all 명령으로 종료합니다 .
#kill 1367
kill 명령어는 pid 기반으로 프로세스를 하나만 종료하지만 killall은 프로세스의 이름을 이용해 그 프로그램이 생성한 모든 프로세스를 종료합니다 .
#killall mysqld
ni값 (nice)
- 프로세스의 우선순위 값을 의미한다.
- 기본적으로 0값을 갖는다. (사용자가 설정)
- -20 ~ 19까지 값을 변경할 수 있으며 작을 수록 우선권을 갖는다.
- root 사용자는 ni값을 증감이 가능
- (감소 : 우선순위를 증가 / 증가 : 우선순위를 감소)
- 일반 사용자는 ni값을 증가만 가능
- 증가 : 우선순위를 감소 (뒤로 미는)
- renice
- 주로 pid를 활용해서 우선순위를 조절을 한다
- 기존 값을 무시하고 적용이 된다
- -20 ~10 까지 사용
- root 사용자만 증감 가능 / 일반사용자는 우선순위(값은 증가)감소만 가능하다
서비스 / 소켓
- 서비스 : 데몬이라고 부르는 프로세스로 컴퓨터가 켜져있는 동안에 24시간 지속적으로 활동하고 있는 프로세스 (network / httpd / named) => standalone 방식
- 소켓 : 접속하려고 할 때 구동되는 프로세스로 예를 들어 ftp서비스를 자주 사용되지 않는데 누군가가 접속을 했을 때만 구동하도록 셋팅 할 수 있다. (리소스 낭비를 최소화 한다)
- 과거에는 inet / xinetd 라고 부름
- 하나의 프로세스가 다른 프로세스를 실행하기 위한 방법
- fork : 리눅스 부팅시 발생하는 데몬 프로세스 / 새로운 프로세스를 위해 메모리를 할당 받아 복사본 형태의 프로세스를 실행하는 형태로 기존 프로세스는 그대로 실행되어 있다.
- exec : 원래 프로세스를 새로운 프로세스로 대체하는 형태로 호출 / 덮어 씌워 버림
서비스
- 시스템과 독자적으로 구동 및 제공되는 프로세스
- 웹서비스 httpd / DB : mariad /ftp : vsftpd
- 실행 및 종료
- systemctl start /stop /restart 서비스 이름
- 서비스 스크립트 파일
- /usr/lib/system/system/*.service 파일로 존재
- 부팅시 자동 실행 (enable)
- 확인법 :systemctl list-unit-files
소켓
- 서비스는 항상 가동 중 !
- 소켓은 외부에서 특정 서비스를 요청시에만 system 에서 구동을 진행한다
- 그리고 요청이 끝나면 소켓도 종료됨
- 소켓은 접속시 로깅이 좀 길고 사용자 입장에서는 느리다라는 느낌을 받을 수 있지만 항상 가동 하지 않기 때문에 리소스는 여유 있게 구동한다.
- 왜냐하면 system 가 서비스를 새로 구동하는 시간이 소요된다 (telnet/ftp)
- 소케과 관련된 파일은 서비스와 동일
- 대신 확장자가 *.socket
nohup : 로그아웃 해도 백그라운드 작업 계속 .
시스템 업데이트를 진행하는데 시간이 너무 많이걸려 로그오프가 되어도 업데이트를 해야 되는 경우가 많다. -> nohup
명령어 뒤에 & 표시를 하면 백그라운드로 실행해라.