진행 중인 프로젝트에서 갑자기 서버 재배포가 안되는 문제가 발생했었다.

급하게 원인을 분석해보니 서버 메모리가 부족해 빌드 파일이 제대로 생성 안되고 있었고 nohup.out 파일이 문제였다.

이를 해결하기 위해 스크립트를 활용해 배포시마다 기존 nohup 파일을  tar.gz로 압축 후 기존 파일을 삭제하고 새로운 nohup 파일을 생성해 사용하는 로직으로 수정했다.

현재 nohup 외에 날짜 별로 로그가 남고 일정 기간 이후 삭제되는 로직을 검토하고있는데 관련 로직이 완성되면 nohup 실행시 nohup.out이 생성안되도록 처리해야할 것 같다. 

관련해 리눅스 문법들을 서치하며 알게된 내용들을 정리하고자 글을 쓰게 됐다.


리눅스에서 압축을 한다하면 크게 3가지 용어가 튀어나오더라.

tar tar.gz zip이 그것인데 각각을 비교해보면 아래와 같다.

 

1. tar

리눅스 환경에서 가장 일반적으로 사용

압축보단 여러개 파일을 하나로 묶는 거에 가까움

따라서, 용량 압축이 거의 없다.

 

tar 명령어

압축

$ tar -cf 압축명.tar 파일명

압축해제

$ tar -xf 파일명.tar

 

2. tar.gz

리눅스 환경에서 가장 일반적으로 사용

합쳐진 tar 파일은 압축하는 방식으로 가장 좋은 압축 옵션

용량압축이 높음에도 cpu가 적게 사용된다.

 

tar.gz 명령어

압축

$ tar -zcvf 압축명.tar.gz 파일명

압축해제

$ tar -zxvf 압축명.tar.gz

3. zip

윈도우 환경에서 가장 많이 쓰는 확장자

거의 모든 os에서 호환되지만 용량 압축이 낮다.

 

zip 명령어

압축

$ zip -r 압축명.zip 파일명

압축해제

$ unzip 압축명.zip

 

 

추가로 알아두면 좋을만한 참고사항

tar  옵션값 

 -c  파일을 tar로 묶음
 -p  파일 권한을 저장
 -v  묶거나 파일을 풀 때 과정을 화면으로 출력
 -f  파일 이름을 지정
 -C  경로를 지정
 -x  tar 압축을 풂
 -z  gzip으로 압축하거나 해제함

tar 경로 지정

 

1. 압축시 경로 지정

압축될 파일명 앞에 위치시킬 폴더명을 같이 입력

ex) var/log/압축명.tar.gz

2. 압축해제시 경로 지정

끝에 -C 폴더위치명 기존 명령어 뒤에 추가로 붙여 입력

ex) -C /var/logs

 

+ 압축전후 파일 용량이 분명 궁금해질텐데 이때 아래 명령어를 사용하길 추천한다.

G,K,M 단위로 표시해줘서 보기 편하다.

$ ls -lh

 

참고사이트

https://suzxc2468.tistory.com/166

https://brownbears.tistory.com/161

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=oiktoail&logNo=220852476226 

 

top 명령어

현재 CPU의 사용률, 메모리 사용률을 종합적으로 확인

$ top

명령어 실행 후 화면에서 Shift + m 키 입력으로 메모리 사용량으로 정렬해서 확인 가능

$ top -d 1 | egrep "PID|systemd"

top 명령어 입력 후 grep 명령을 사용해서 특정 프로세서의 메모리 사용량을 1초마다 확인

 

free 명령어

$ free

메모리 사용량 정보 확인

 

ps 명령어

$ ps -ef --sort -rss

현재 실행 중인 모든 프로세스의 메모리 사용량을 기준으로 정렬 후 pid 와 프로세스 보여줌

$ ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,cmd --sort -rss | head -n 11

전체 프로세스 메모리 사용량 상위 10개 확인

 

meminfo 명령어

$ cat /proc/meminfo | grep Mem

 

 현재 시스템의 전체 메모리와 가용 메모리 확인

 

 

참고 사이트

https://118k.tistory.com/953

https://www.runit.cloud/2020/11/linux-process-memory-usage.html

https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EC%82%AC%EC%9A%A9%EB%A5%A0_%ED%99%95%EC%9D%B8

프로젝트를 진행하면서 로그 파일을 읽기 위해 vi/vim 명령어로 파일을 열 경우 용량이 커 화면이 멈추는 이슈가 계속 발생했다. 

로그를 확인하는 건 필수적인 부분이므로 관련해 해결 방법을 찾다가 less 명령어를 발견했다.

vi/vim의 경우 파일을 편집모드로 열지만 less 명령어의 경우 읽기 전용 모드로만 열리기 때문에 메모리 사용량이 높지않다.

 

$less 파일명

PAGE UP 또는 b : 한 페이지 위로

PAGE DOWN 또는 Space bar : 한 페이지 아래로

g : 텍스트 파일의 처음 부분으로 이동

G : 텍스트 파일의 마지막 부분으로 이동

/문자열 : 입력된 문자열 찾기

n : 이전 검색어의 다음 찾기

Ng : 파일의 N번째 줄로 이동합니다.

h : 도움말 보기

q : 프로그램 종료

 

참고 사이트

http://1004lucifer.blogspot.com/2016/07/linux-vi-less_29.html

https://tychejin.tistory.com/94

https://jjeongil.tistory.com/1629

/  루트 디렉토리, 리눅스 모든 디렉토리의 출발점
   빈 상태 유지하는 게 바람직
/bin 사용자 명령어 디렉토리 실행 파일들 
/boot 부트 이미지 디렉토리
        부팅 과정에서 필요한 구성요소들 포함
/dev 장치 파일 디렉토리
       디바이스 드라이버
/etc 시스템 환경 설정
      시스템 부팅, 셧다운에 필요한 파일들
      시스템 전반에 걸친 설정 파일들
      초기 스크립트 파일들
/home 사용자 홈
/lib 공유 라이브러리 및 커널 모듈
/lost+found 파일 시스템 복구를 위한 fsck 링크 
/misc 시스템 아키텍쳐와 무관한 프로그램 및 자료들  
/mnt 마운트 포인트
/opt 애드온 소프트웨어 패키지 
/proc 커널과 프로세스를 위한 가상 파일 시스템
/sbin 시스템 관리를 위한 전반적인 실행 유틸리티 
/tmp 임시 작업들
       프로세스 진행 중 발생하는 임시 파일들이 저장
/usr 공유 파일 시스템 
      사용자가 실행할 프로그램들이 저장됨 시스템이 실행x 
      중요한 시스템 디렉토리 계층
      공유 가능한 대다수 프로그램들이 설치
      네트워크를 이용해 시스템들을 연결시 이 디렉토리를 공유해서 설치된 프로그램들을 활용
      읽기 전용으로 마운트
/usr/bin 시스템 소유 소프트웨어를 담기 위한 warehouse
/usr/etc 유틸리티와 파일들
/usr/include c컴파일러를 위한 include 파일들 포함함
/usr/lib 프로그램 컴파일 시 이 위치의 파일들과 link

           실행코드 필요시 /lib를 찾음
/usr/local 시스템의 특성 결정 짓는 소프트웨어들 존재
              반드시 필요로 하는 것은 아님 
/usr/man 실제적인 man page
/usr/src 프로그램들의 컴파일 되지 않은 소스 코드들
/usr/infi GNU info를 위한 디렉토리
/var 가변 자료 디렉토리

-레드햇

 다른 리눅스 배포판에 비해 패치가 빠름
-센토스 os 

레드햇의 RHEL을 그대로 가져와서 배포한 배포본
서버용 운영체제로 인기가 많음
-데비안 

무료 개인사용자 서버용으로 인기가 많음
넓은 유저층을 가지고 있어서 웹사이트나 커뮤니티 정보 많음
-우분투

쉽고 편한 설치와 이용법 덕분에 진입장벽이 낮음
서버용으로 성능이 딸리진않으나 점유율로 센토스에 많이 밀림

+ Recent posts