[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
명령어 뒤에 & 표시를 하면 백그라운드로 실행해라.