top

현재시간 ( 04:55:15), 시스템이 작동된 시간 ( 2 days 1:56 ), 로그인해 있는 유저 수 ( 3 users ) 

1 분 , 5분, 15분의 load average ( 0.00, 0.00, 0.00 ) : 

* load average : cpu 나 disk I/O 을 기다리고 있는 프로세스의 평균수, 시스템이 얼마나 바쁜지를 측정하는 것

 

Tasks

총 113 프로세스가 있고, 1 개가 실행 중, 112 개는 대기 중, 0개 중지, 0 좀비

* zombie process :  실행이 끝났는데 여전히 프로세스 테이블에 존재하는 프로세스

 

%Cpu(s) : cpu가 사용된 시간의 비율

표현  의미
0.0 us (user) 유저 프로세스를 실행하는데 cpu 가 사용 시간의 비율 (%) 
0.0 sy (system) 시스템 프로세스 
0.0 ni (nice) 우선순위가 낮춰진 사용자 프로세스를 실행하는데 사용된 cpu 시간의 비율
100.0 id (idle) 사용되지 않는 CPU의 비율, 현재 어떠한 작업도 처리하고 있지 않음
0.0 wa (wait) I/O 작업을 완료하기 위해 대기하는 동안 사용된 CPU 시간의 비율
0.0 hi (hardware IRQ :Interrupt request) 하드웨어 인터럽트를 처리하는 데 사용된 CPU 시간의 비율
0.0 si (software IRQ) 소프트웨어 인터럽트를 처리하는 데 사용된 CPU 시간의 비율
0.0 st (steal) 가상화 환경에서 다른 가상 머신으로부터 '도둑질된' 가상 CPU의 CPU 시간 비율

 

Memory Usage

MiB (mebibyte) Mem : 총 물리적인 메모리 957.4, 68 여유, 878.6 사용 중, 쓰기위해 버퍼링된 정보의 양 162.4

MiB Swap : 총 가상 메모리 0.0 , ....,  swapping 없이 새로운 어플리케이션을 시각하기위해 가능한 메모리양 78.9

 

PID USER PR NI VIRT RES
프로세스 아이디 프로세스를 소유하고 있는 유저 프로세스의 우선순위 Nice value 프로세스가 사용하고 있는 가상 메모리 가상메모리의 하위집합, 현재 작업이 사용중인 비스왑된 물리적 메모리
SHR S %CPU %MEM TIME+ COMMAND
공유된 메모리 사이즈 프로세스 상태
'S' : sleeping
프로세스에 의해서 사용되고 있는 cpu 비율 프로세스에 의해서 사용되는 메모리의 비율 총 cpu 사용 시간 프로세스를 시작하는데 사용되는 명령이름 또는 명령줄

 

PR  값의 범위 -[ -100, 39 ]

    [ -100, -2 ] : realtime process, 

    [ 0, 39 ] : 상대적으로 우선순위가 낮은 프로세스

 

NI 값의 범위 [-20 , 19 ] -  유저가 지정가능

 

 

 

참고자료

https://www.redhat.com/sysadmin/interpret-top-output

https://www.baeldung.com/linux/top-command

https://unix.stackexchange.com/questions/390518/what-do-the-buff-cache-and-avail-mem-fields-in-top-mean

예시로 mysql 을 사용

 

  • Loaded:  명시한 서비스가 활성화된 위치를 나타냅니다.
    • enabled: 서비스가 시스템 부팅 시 자동으로 시작되도록 설정되어 있음을 의미합니다.
    • preset: enabled : 서비스가 기본적으로 활성화 상태로 설정되어 있다는 것을 의미합니다.
  • Active:  서비스가 실행된 날짜와 시간이 적혀 있으며, 실행된 시점 부터 지난 시간을 알려 줍니다.
  • Process: 서비스를 시작하기전에 수행되는 명령어를 보여줍니다.
    • 7117 : 명령어를 실행하는데 사용되는 스크립트나 명령어의 프로세스 아이디를 의미합니다.
    • ExecStartPre : 서비스가 실제로 시작되기 전에 실행되어야 하는 스크립트나 명령어를 지정합니다.
    • Code-Exited, Status=0/SUCCESS : ExecStartPre에 있는 명령어가 성공적으로 수행되었다는 것을 의미합니다.
  • Main PID: mysql 의 PID
  • Status: 서비스의 상태를 나타냅니다.
  • Tasks:  이 서비스가 관리하는 작업(쓰레드)의 수는 38개 이고, 제한은 1130개 라는 것을 의미합니다.
  • Memory: 현제 이 서비스가 사용하고 있는 메모리의 양을 나타냅니다.
  • CPU: CPU가 소모된 시간을 나타냅니다.
  • CGroup: control group (cgroup),  systemd가 MySQL 서비스 리소스를 관리하는 데 사용하는 제어 그룹(cgroup)으로, 특히 주 PID와 서비스 실행 파일에 연결합니다. MySQL 가 어떤 자원을 어느 정도 사용하고 있는지 보여주는 경로를 제공합니다

 

소개

PM2는 Node.js 애플리케이션을 위한 고급 프로덕션 프로세스 매니저입니다.

이 도구는 애플리케이션을 백그라운드에서 실행하고, 다운되면 자동으로 재시작하며, 로드 밸런싱을 위한 클러스터 모드를 제공하는 등의 기능을 포함하고 있습니다.

 

사용하는 이유

PM2는 주로 아래와 같은 기능들 때문에 널리 사용됩니다:

  1. 프로세스 관리: PM2는 애플리케이션을 백그라운드에서 실행하고, 애플리케이션이 실패했을 때 자동으로 재시작합니다. 
  2. 로드 밸런싱: 여러 인스턴스를 실행하여 애플리케이션의 부하를 분산시키는 클러스터 모드를 제공합니다. 이는 시스템 리소스를 효율적으로 사용하고 성능을 향상시키는 데 도움을 줍니다.
  3. 로그 관리: 실행 중인 프로세스의 로그를 관리하고, 쉽게 접근할 수 있게 해 줍니다. 이는 문제 해결 과정에서 큰 도움을 줍니다.
  4. 무중단 서비스: PM2는 노드 애플리케이션을 무중단으로 운영할 수 있도록 돕습니다. 코드를 변경한 후에도 서비스를 중단하지 않고 업데이트할 수 있습니다.

 기본적인 사용방법

- 설치

$ npm install -g pm2@latest

 

- pm2 를 이용한 애플리케이션 실행

$ pm2 start app.js

 

-  프로세스 삭제 , 중단,  모든 프로세스 죽이기

$ pm2 delete 프로세스id
$ pm2 stop 프로세스id
$ pm2 kill

 

- 프로세스 재시작/ 리로딩

$ pm2 restrart 프로젝트실행파일이름.js // 선호되지 않는 명령어 :프로세스를 kill하고 시작
$ pm2 reload 프로젝트실행파일이름.js // 선호 : 프로세스를 kill 하지 않고 바로 적용

 

- 프로세스 상태확인

$ pm2 status
$ pm2 list

   status : 현재 실행중인 프로세스의 운영상태에 초점을 맞춘 정보 제공

   list :  모든 관리 중인 프로세스에 대한  포괄적인 세부 정보 제공 

 

- 프로세스 모니터링

$ pm2 monit

 

 

무중단 서비스 적용 방법

→ cluster 모드로 실행  : Node.js가 싱글 스레드라서 주어진 자원을 최대한 활용하지 못하고 하나의 CPU만 사용하는 문제를 해결할 수 있습니다.

 

- ecosystem.config.js 파일 생성

$ pm2 ecosystem

 

- 파일을 아래와 같이 수정

apps: [{
  name: 'app',
  script: './app.js',// 실행해야하는 스크립트 입력
  instances: 0, // cpu 코어수 만큼 프로세스 생성
  exec_mode: ‘cluster’, // 모드 변경
  env: {
      NODE_ENV: 'local',
    },
  }]

  참고로 app 에 사용할 수 있는 변수는 다음과 같다.

  • name : 실행 모드 이름
  • script : 실행되는 파일
  • instances : 프로세스 수
  • autorestart : 재시작 on/off
  • watch : watch on/off
  • env: Node.js 환경변수 

프로세스 증가 / 감소

$ pm2 scale app +4 // 프로세스 4 증가
$ pm2 scale app 4  // 프로세스 4 감소

 

- 실행

$ pm2 start ecosystem.config.js

 

 

 참고자료

  1. https://engineering.linecorp.com/ko/blog/pm2-nodejs
  2. https://any-ting.tistory.com/74  
  3. pm2.keymetrics.io/

폴더삭제 명령어

$ rmdir '삭제할 폴더명'

 

폴더 안에 뭐가 다른 파일이나 폴더가 있을경우 삭제가 되지 않는 경우

 

$ rm -rf '삭제할 폴더명'

 r : 파일 디렉토리 함께 삭제하기

 f : 파일 유무와 상관없이 삭제하기

디렉터리나 파일의 owner 와  group 을 변경하여 사용자와 그룹에 대한 권한을 설정가능

 

chown [옵션] owner[:group] file

 

 

예시

# 파일소유자를 jeongwoo 으로 변경
$ chown jeongwoo personal.file 

# "moe.dir" 및 이 디렉토리 아래의 모든 파일 및 서브디렉토리에 대한 소유자를 "larry"로 반복적으로 변경
$ chown -R larry moe.dir

# "memo.txt" 파일의 소유자를 "sam", 파일의 소유 그룹을 "abbey" 로 변경 
$ chown sam:abbey memo.txt

 

옵션정보 ( $ man chown )

옵션 내용
-R recursicve, 지정한 파일 혹은 폴더의 하위까지 변경
-H (R 과 같이 사용) 명령어에 지정된 심볼릭 링크가 가리키는 대상의 소유권이 변경
해당 대상 내부에 또 다른 심볼릭 링크가 있으면 그 링크는 변경안됨
-L (R 과 같이 사용) 심볼릭 링크가 가리키는 실제 파일이나 디렉토리의 소유권도 변경
-P (R 과 같이 사용) 명령어 내의 모든 파일과 디렉토리의 소유권을 변경하지만, 
심볼릭 링크가 가리키는 대상은 변경하지 않고 심볼릭 링크 자체의 소유권만 변경
-h 파일이 심볼릭 링크인 경우 링크자체의 사용자 및 그룹 을 변경
(기본값)  명령어에 심볼릭링크가 있다면 링크 자체의 소유권만 변경

 

 

참고자료

https://www.ibm.com/docs/ko/i/7.3?topic=directories-chown

 

chown - 파일 소유권 변경

요약 chown [-R [ -H | -L | -P ]] [ -h ] owner[:group] file ... 설명 chown을 사용하여 파일의 소유자를 소유자가 지정한 사용자 ID 또는 프로파일로 설정할 수 있습니다. 선택적으로 chown은 파일의 그룹을 그룹

www.ibm.com

 

 

+ Recent posts