화면을 수정했는데, 클라이언트의 브라우져에 캐시가 남아서 이전 화면이 나오는 경우가 있다.
직접 브라우져 설정 들어가서 캐시를 지워달라고 요청 할 수도 있지만, 그게 한두번이 아니게 되니 코드에서 캐시를 지울수 없는지 찾아보았다.
이럴수가...
크게 어렵지도 않지만, html한정으로 이게 꼭 필요한 화면이 아니면 아래 설정은 가급적 안 하는게 좋을 것 같다.

HTML 메타태그 이용하기

    <!-- 1990년 이후 이 페이지의 캐시를 만료시킴. -->
    <meta http-equiv="Expires" content="Mon, 06 Jan 1990 00:00:01 GMT" />

    <!-- 캐시를 바로 만료시킴. -->
    <meta http-equiv="Expires" content="-1" />

    <!-- 페이지 로드시마다 페이지를 캐싱하지 않음. (HTTP 1.0) -->
    <meta http-equiv="Pragma" content="no-cache" />

    <!-- 페이지 로드시마다 페이지를 캐싱하지 않음. (HTTP 1.1) -->
    <meta http-equiv="Cache-Control" content="no-cache" />

JSP, Java 사용시

자바 코드 지만 html과 같음.

    response.setHeader( "Pragma", "no-cache" );
    response.setDateHeader( "Expires", -1 );
    response.setHeader( "Cache-Control", "no-cache" );

JS, CSS 파일 캐시 사용 방지

js나 css등 정적파일도 종종 변경을 해도 캐시문제로 적용이 되지 않는 경우가 많다.
그럴 경우 파일의 url 뒤에 ?timestamp 형태를 넣어준다.

  <link rel="stylesheet" href="/css/common.css?20210512" />
  <script type="text/javascript" src="/js/common.js?20210512"></script>

728x90
반응형

'WEB > JSP, JSTL' 카테고리의 다른 글

[JSP, JSTL] fn function 정리 - 2  (0) 2020.12.11
[JSP, JSTL] fn function 정리  (0) 2020.11.30
[JSP, JSTL] forEach 잘 사용하기  (0) 2020.11.30

실시간으로 CPU 사용을 체크해 주는 명령어임.
시스템의 프로세스와 메모리 사용 상태, 리눅스 서버의 성능을 5초간격으로 업데이트 하면서 화면에 출력.
어떤 프로세스가 CPU를 과도하게 잡고있는디 파악할 때 필요함.


사용법

  top [option]
OPTION DESC
-b 배치모드로 정보 출력.
-d delay delay 값 만큼 초 단위로 정보를 업데이트. (기본 5)
-i idle 토글 값이 off 일 때, idle 프로세스나 좀비 프로세스 정보를 출력하지 않음.
-n num num 시간 만큼 업데이트 정보를 출력함.
-p pid 지정한 pid의 프로세스 정보만 출력.
-q 시간의 간격 없이 계속하여 업데이트 정보를 출력.
-s 몇 개의 대화식 명령을 비활성화.(뭘?)
-S 누적된 정보 출력.
  top

  top - 16:33:32 up 19 days,  1:39,  1 user,  load average: 0.00, 0.02, 0.00
  Tasks: 272 total,   1 running, 271 sleeping,   0 stopped,   0 zombie
  Cpu(s):  0.2%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  Mem:  16291780k total, 16078316k used,   213464k free,   220104k buffers
  Swap: 25165816k total,        0k used, 25165816k free, 15329424k cached

    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  16584 nobody    20   0 2023m  17m 3592 S  1.3  0.1 120:06.69 httpd
  2181  root      20   0  121m 2264 1856 S  0.3  0.0   0:40.52 nvcmgr
  15970 nobody    20   0 2023m  13m 3584 S  0.3  0.1  30:17.18 httpd
  16052 nobody    20   0 2023m  14m 3584 S  0.3  0.1  34:41.69 httpd
  29604 root      20   0 15168 1384  948 R  0.3  0.0   0:00.04 top
      1 root      20   0 19364 1540 1232 S  0.0  0.0   0:03.10 init
      2 root      20   0     0    0    0 S  0.0  0.0   0:00.04 kthreadd
  ...

옵션은 많지만 보통은 옵션 없는 명령이나 pid 정도만 확인함.
실행 후 h 를 입력하면 사용할 수 있는 단축키를 확인할 수 있음.


표출 데이터 : 첫 번째 줄

리눅스 컴퓨터의 정보와 시스템 부하율를 출력함.
top - 16:33:32 up 19 days, 1:39, 1 user, load average: 0.00, 0.02, 0.00

  • 16:33:32 :
    시스템 현재 시간
  • up 19 days, 1:39 :
    시스템이 부팅된 후 현재까지 운영된 시간.
  • 1 user :
    현재 로그인된 사용자의 수.
  • load average :
    0.00, 0.02, 0.00 최근 1분, 5분, 15분 각각의 시스템 평균 부하율.


표출 데이터 : 두 번째 줄

프로세스들의 종합적인 상황정보 출력.
Tasks: 272 total, 1 running, 271 sleeping, 0 stopped, 0 zombie

  • Tasks: 272 total :
    전체 실행중인 프로세스 수.
  • 1 running :
    현재 실행된 프로세스 수.
  • 271 sleeping :
    유휴상태에 있는 프로세스 수.
  • 0 stopped :
    종료된 프로세스 수.
  • 0 zombie :
    좀비 프로세스 수.
    • 대부분의 프로세스는 부모프로세스가 종료되면 자식프로세스들은 자동종료됨.
      부모프로세스가 종료되었음에도 남아있는 자식프로세스를 좀비프로세스라고 하며, 시스템이 느려지는 원인이 됨.
      대부분의 좀비 프로세스는 init 프로세스에 의해 관리되며, kill 명령으로 강제종료 시켜도 무방함.


표출 데이터 : 세 번째 줄

CPU의 사용 및 실행 상태를 출력.
Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

  • Cpu(s): 0.2%us :
    사용자가 실행시킨 프로세스들의 CPU 사용율.
  • 0.1%sy :
    시스템에서 사용하는 프로세스들의 CPU 사용율.
  • 0.0%ni :
    noce 정책에 의해 사용되고 있는 CPU 사용율.
  • 99.8%id :
    사용되지 않고 남은 CPU 사용율.
  • 0.0%wa :
    입출력 대기상태의 CPU 사용율.
  • 0.0%hi :
    IRQs에 사용된 CPU.
  • 0.0%si :
    softIRQs에 사용된 CPU.
  • 0.0%st :
    다른 인스턴스 실행에 주어진 time, steal 값


표출 데이터 : 네 번째 줄

메모리 사용 상태 출력.
Mem: 16291780k total, 16078316k used, 213464k free, 220104k buffers

  • Mem: 16291780k total :
    실제메모리의 사용량.
  • 16078316k used :
    프로세스에 의해 사용되고 있는 메모리 사용량.
  • 213464k free :
    사용되지 않고 남아있는 메모리 양.
  • 220104k buffers :
    버퍼링된 메모리 양.


표출 데이터 : 다섯 번째 줄

스왑 메모리의 상태 출력.
Swap: 25165816k total, 0k used, 25165816k free, 15329424k cached

  • Swap: 25165816k total :
    전체 메모리 스왑 양.
  • 0k used :
    프로세스에 의해 사용된 스왑메모리 양.
  • 25165816k free :
    남아있는 스왑메모리양.
  • 15329424k cached :
    캐싱 메모리양.

현재 시스템의 스왑메모리 운용 상황이므로 스왑메모리가 많이 사용되고 있다라는 의미는 실제 메모리가 부족하는 것의 증거임.


표출 데이터 : 여섯 번째 줄

전체 개별 프로세스들의 시스템 자원 사용현황과 실행상태를 파악할 수 있음.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

  • PID :
    해당 프로세스의 유일한 프로세스 번호(Process ID, 키 값)
  • USER :
    프로세스를 실행시킨 사용자.
  • PR :
    프로세스의 우선순위(Priority, 키값 : H)
  • NI :
    프로세스의 NICE 값 (Nice Value, 키값 : I), Minus(-)를 가질수록 높은 우선순위를 갖고, Plus(+)를 가질수록 낮은 우선순위를 가짐.
    0 값은 우선순위가 적용되지 않음.
  • VIRT :
    해당 프로세스가 사용한 가상메모리의 총량 (Virtual(kb), 키값 : o)
  • RES :
    해당 프로세스의 물리적인 메모리 사용량 (Resident Size(kb), 키값 : q)
  • SHR :
    해당 프로세스에 의해 사용된 공유 메모리의 총량(Shared Mem Size(kb), 키값 : t)
  • S :
    프로세스의 상태를 나타냄.
    • S : sleeping
    • R : running
    • W : swapped out process
    • Z : zombies
  • %CPU :
    프로세스가 사용하는 CPU 사용율.
  • %MEM :
    프로세스가 사용하는 메모리 사용율.
  • COMMAND :
    실행된 명령어.


top 실행 후 단축키 명령어

CMD DESC
space 정보 업데이트
shift + p CPU 사용율 내림차순 정렬
shift + m 메모리 사용율 내림차순 정렬
shift + t 프로세스 작동 시간 내림차순 정렬
k pid 프로세스 종료
a 메모리 사용량에 따라 정렬
b batch 모드
c cli, 프로그램 이름 토글
h 매뉴얼
n or # 출력할 프로세스 수 지정
s 출력할 정보의 업데이트 시간 조정
q top 종료
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] There are stopped jobs  (0) 2021.05.28
[Linux] 인터넷 속도 확인  (0) 2021.05.28
[Linux] 리눅스 서버 60초 안에 상황 파악하기  (0) 2021.05.06
[Linux] 리눅스 버전 확인하기  (0) 2021.05.06
[Linux] find 명령어  (0) 2021.05.03

[Linux] 리눅스 서버 60초 안에 상황 파악하기

운영중인 시스템이 리눅스에서 작동중인데 자꾸 알 수 없이 프로세스가 죽는 등의 문제가 있었다.
지금은 해결 했지만, 서버 컴퓨터의 상태를 확인하는데 삽질을 많이 했었고, 또 이런 일이 발생한다면, 구글링 없이 바로 찾아볼 수 있도록 기록 해 본다.
사실 이해를 100% 한것도 아니고, 어설픈 번역이라 누군가에게 도움이 될지는 모르겠다.

이 내용은 넷플릭스의 60초안에 리눅스 퍼포먼스 상태 파악하기라는 글의 각색 및 번역이다.
원문보기

리눅스 서버의 성능 이슈로 인해 원격으로 접속했을 때 먼저 체크해 봐야 할 사항.

리눅스는 AWS EC2를 사용하며, 서버를 모니터링하고 성능을 체크하는데 클라우드 전체를 모니터링하는 Atlas, 하나의 인스턴스를 확인하는 Vector 등의 툴을 사용한다. 이 툴을 사용하면 대부분의 이슈는 해결 가능하지만, 가끔 인스턴스에 접속하여 성능을 체크해야할 때가 있다.


첫 60초 요약

1분안에 표준적인 리눅스 환경에서 CLI를 이용하여 어떤 것들을 확인할지에 대한 순서 요약이다.
60초 안에 다음 10개 명령어를 실행하여 시스템 리소스 사용 및 실행 프로세스에 대한 높은 수준의 방안을 찾을 수 있음.
해석하기 쉬운 오류와 포화지표를 찾은 다음 리소스 활용도를 찾음. 포화 상태는 리소스가 처리할 수 있는 것보다 더 많은 부하를 가지고 있으며 요청 대기열의 길이 또는 대기 시간으로 확인 가능할 수 있음.

  uptime
  dmseg | tail
  vmstat 1
  mpstat -P ALL 1
  pidstat 1
  iostat -xz 1
  free -m
  sar -n DEV 1
  sar -n TCP,ETCP 1
  top

일부 명령어는 sysstat package를 설치해야 함.
이 측정 방법은 USE Method 라고 불리는 병목현상이 생기는 위치를 찾는 방법의 일부임.
USE는 CPU, memory, disk 등의 모든 자원에 대해서 사용율, 포화도 및 오류 메트릭을 측정하는 방법임.

아래에서는 프로덕션 시스템의 예와 함께 이 명령어들을 요약이며, 명령어데 대한 자세한 설명은 해당 메뉴얼을 참고해야함.


uptime

  uptime
  
  11:18:48 up 18 days, 20:24,  2 users,  load average: 30.02, 26.43, 19.02

uptime은 현재 대기중인 프로세스가 얼마나 있는지를 나타내는 load average 값을 확인하는 가장 쉬운 방법임. Linux 시스템에서 이러한 숫자에는 CPU에서 실행하려는 프로세스와 무중단 I/O(일반적으로 디스크 IO)에서 차단 된 프로세스가 포함됨. 이는 얼마나 많은 리소스가 사용되는지 확인할 수 있지만, 다른 도구 없이는 제대로 이해할 수 없음.

간단하게 살펴 보자면, 세 개의 숫자는 1, 5, 15분의 load average임.
세 개의 숫자는 시간이 지남에 따라 부하가 어떻게 변하는 지에 대한 부하를 알 수 있음.
예를 들어 문제가 있는 서버를 확인하라는 요청을 받았는데 1분 값이 15분 값보다 낮은 경우 너무 늦게 시스템에 접근하여 문제를 놓쳤을 수 있음.

위의 예에서 load average는 1 분 값이 약 30이고 15분 값이 19정도 되는 것으로 볼 때 최근 상승한 것을 알 수 있음.
숫자가 이렇게 크다는 것은 CPU 사용량에 문제가 있을 것으로, vmstat 또는 mpstat은 이 순서에서 실행하여 확인 해야 함.


dmesg | tail

  dmesg | tail

  [1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
  [...]
  [1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
  [1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
  [2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP counters.

dmesg는 마지막 10개의 시스템 메세지를 확인 할 수 있는 명령임.
시스템 문제를 일으킬 수 있는 오류가 있을 수도 있음. 위 예제는 oom-killer(out of memory)와 TCP request가 드랍된 것을 알 수 있음.
항상 확인 할 가치가 있음.


vmstat 1

  vmstat 1

  procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
  1  0  58272 162580 157140 9271900    0    0     2     1    1    0  0  0 100  0  0    
  0  0  58272 162580 157140 9271900    0    0     0     0  130  222  0  0 100  0  0    
  0  0  58272 162572 157140 9271900    0    0     0     0  133  252  0  0 100  0  0    
  0  0  58272 162572 157140 9271900    0    0     0     0  101  208  0  0 100  0  0    
  0  0  58272 162696 157140 9271900    0    0     0     0  130  271  0  0 100  0  0    
  1  0  58272 162820 157140 9271900    0    0     0     0  127  264  0  0 100  0  0    
  0  0  58272 162820 157140 9271900    0    0     0     0  143  259  0  0 100  0  0    
  0  0  58272 162820 157140 9271900    0    0     0     0   93  202  0  0 100  0  0    
  0  0  58272 162804 157140 9271900    0    0     0    12  575  747  0  0 100  0  0    
  0  0  58272 162928 157140 9271900    0    0     0     0 1249 1020  1  0 99  0  0    
  1  0  58272 162804 157140 9271900    0    0     0    20 1163  975  1  0 99  0  0    
  1  0  58272 162556 157140 9271900    0    0     0     0 2743 1162  1  0 99  0  0    
  0  0  58272 161812 157140 9271900    0    0     0     0 2532  987  0  0 99  0  0    
  0  0  58272 161688 157140 9271912    0    0     0     0  122  229  0  0 100  0  0    
  1  0  58272 161812 157140 9271912    0    0     0     0  113  238  0  0 100  0  0    
  0  0  58272 161828 157140 9271912    0    0     0    40  232  331  0  0 100  0  0    
  0  0  58272 161704 157140 9271912    0    0     0     0  141  276  0  0 100  0  0    
  1  0  58272 161704 157140 9271912    0    0     0     0  103  207  0  0 100  0  0    
  0  0  58272 161688 157140 9271912    0    0     0     0  208  337  0  0 100  0  0    
  0  0  58272 161688 157140 9271912    0    0     0     0  100  213  0  0 100  0  0    
  ^C

가상 메모리 통계의 약자인 vmstat은 일반적으로 사용 가능한 명령임.
각 행에 주요 시스템 통계 요약을 출력함.

1초 요약을 출력하기 위해 vmstat에 1을 인수로 실행함.
출력의 첫 번째 행에서는 이전 두 번째 대신 부팅 이후 의 평균을 표시하는 열이 있음.

  • 확인 할 열
    • r :
      CPU에서 실행 중이고 차례를 기다리는 프로세스의 수. CPU 자원의 포화(saturation)가 발생하는지 확인할 때 참고 할 수 있음. CPU보다 큰 r 값은 포화상태임.
    • free :
      free memory를 kb 단위로 출력. free memory가 너무 자리수가 많을 경우 충분한 공간이 있음을 의미. free -m을 이용하면 좀 더 읽기 편함.
    • si, so :
      swap-in과 swap-out에 대한 값으로 0이 아니라면 시스템에 메모리가 부족한 것임.
    • us, sy, id, wa, st :
      모든 CPU의 평균적인 CPU time을 측정 가능.
      각각 user time, system time(kernel), idle, wait I/O, stolen time(가상 CPU를 서비스 하는 동안 실제 CPU를 차지한 시간을 의미) 순임.

CPU 시간 분석은 사용자 + 시스템 시간을 추가하여 CPU가 사용 중인지 확인함. 일정한 수준의 대기 I/O는 디스크 병목 현상을 의미. 대기중인 디스크 IO를 기다리는 작업이 차단되기 때문에 CPU가 유휴 상태임.

IO 처리에는 시스템 시간이 필요함. 20% 이상의 높은 시스템 시간 평균은 더 자세히 살펴 보는 것이 권장됨. 아마 커널이 IO를 비효율적으로 처리하고 있을 수 있음.

CPU는 평균적으로 90% 이상 사용됨. 이는 문제는 아니지만, r 열을 확인해야함.


mpstat -P ALL 1

  mpstat -P ALL 1
  
  Linux 2.6.32-431.el6.x86_64 (WAS2)     2021년 05월 06일     _x86_64_    (12 CPU)

  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
  all    0.50    0.00    0.08    0.00    0.00    0.00    0.00    0.00   99.42
    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    8    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    9    4.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   95.00
   10    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
   11    0.99    0.00    0.99    0.00    0.00    0.00    0.00    0.00   98.02
  ...

이 명령은 CPU time을 CPU 별로 출력함. 각 CPU 별로 불균형한 상태를 확인할 수 있는데, 한 CPU만 일하고 있는 것은 어플리케이션이 싱글 스레드로 동작한다는 의미임.


pidstat 1

  pidstat 1
  
  Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)

  07:41:02 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
  07:41:03 PM     0         9    0.00    0.94    0.00    0.94     1  rcuos/0
  07:41:03 PM     0      4214    5.66    5.66    0.00   11.32    15  mesos-slave
  07:41:03 PM     0      4354    0.94    0.94    0.00    1.89     8  java
  07:41:03 PM     0      6521 1596.23    1.89    0.00 1598.11    27  java
  07:41:03 PM     0      6564 1571.70    7.55    0.00 1579.25    28  java
  07:41:03 PM 60004     60154    0.94    4.72    0.00    5.66     9  pidstat

  07:41:03 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
  07:41:04 PM     0      4214    6.00    2.00    0.00    8.00    15  mesos-slave
  07:41:04 PM     0      6521 1590.00    1.00    0.00 1591.00    27  java
  07:41:04 PM     0      6564 1573.00   10.00    0.00 1583.00    28  java
  07:41:04 PM   108      6718    1.00    0.00    0.00    1.00     0  snmp-pass
  07:41:04 PM 60004     60154    1.00    4.00    0.00    5.00     9  pidstat
  ^C

pidstat은 process 당 top 명령과 비슷한데 스크린 전체에 표시하는 것이 아니라, 지속적으로 변화하는 상황을 출력하기 때문에 상황변화를 기록하기 좋음.

위 예는 CPU 자원을 차지하는 두 개의 java 프로세스를 보여줌. %CPU 열은 CPU의 합계로 1591%는 java 프로세스가 거의 16개의 CPU를 차지하고 있음을 의미함.


iostat -xz 1

  iostat -xz 1
  
  Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)

  avg-cpu:  %user   %nice %system %iowait  %steal   %idle
            73.96    0.00    3.73    0.03    0.06   22.21

  Device:   rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
  xvda        0.00     0.23    0.21    0.18     4.52     2.08    34.37     0.00    9.98   13.80    5.42   2.44   0.09
  xvdb        0.01     0.00    1.02    8.94   127.97   598.53   145.79     0.00    0.43    1.78    0.28   0.25   0.25
  xvdc        0.01     0.00    1.02    8.86   127.79   595.94   146.50     0.00    0.45    1.82    0.30   0.27   0.26
  dm-0        0.00     0.00    0.69    2.32    10.47    31.69    28.01     0.01    3.23    0.71    3.98   0.13   0.04
  dm-1        0.00     0.00    0.00    0.94     0.01     3.78     8.00     0.33  345.84    0.04  346.81   0.01   0.00
  dm-2        0.00     0.00    0.09    0.07     1.35     0.36    22.50     0.00    2.55    0.23    5.62   1.78   0.03
  [...]
  ^C

디스크(HDD, SSD 등)의 퍼포먼스를 알기 좋은 명령어임.

  • r/s, w/s rkB/s, wkB/s :
    장치에 전달 된 읽기, 쓰기, 읽기 속도 및 쓰기속도임. 어떤 작업이 많이 들어오는지 확인 할 수 있음.
    성능 문제는 단순히 과도한 로드(읽기나 쓰기)가 적용되었기 때문일 수 있음.
  • await :
    IO 처리 평균 시간을 밀리초로 표현한 값.
    어플리케이션의 IO 요청이 queue에 있는 시간과 서비스 되는 시간을 모두 포함한 시간임(어플리케이션의 읽기 쓰기 소요시간). 일반적인 장치의 요청 처리 시간보다 길면 장치 포화 또는 장치 문제를 의미하게 됨.
  • avgpu-sz :
    장치에 발행 된 평균 요청수. 1보다 큰 값은 포화의 증거임.
  • %util :
    장치 사용율. 장치마다 다르지만 60% 보다 큰 값은 성능 저하를 의미함.

성능이 좋지 않은 디스크 IO는 어플리케이션 문제가 아닐 수 도 있음. 만은 기술이 일반적으로 IO를 비동기식으로 수행하는데 읽기를 위한 미리 읽기, 쓰기를 위한 버퍼링으로 지연 될 수도 있음.


free -m

  free -m
  
               total       used       free     shared    buffers     cached
  Mem:        245998      24545     221453         83         59        541
  -/+ buffers/cache:      23944     222053
  Swap:            0          0          0
  • buffers : Block 장치 IO의 buffer 캐시, 사용량.
  • cached : 파일 시스템에서 사용되는 page cache 양.
    buffers와 cahced

위의 값들이 0에 가까워 지면 안됨. 이는 곳 높은 Disk I/O가 발생하고 있음을 의미함. (iostat으로 확인 가능함)
위는 각각 59MB, 541MB로 괜찮은 정도임.

'-/+ buffers/cache'는 사용중인 메모리와 여유 메모리 양을 의미함.
리눅스는 빠르게 어플리케이션 메모리가 다시 할당될 수 있도록 캐시메모리를 사용함.
따라서 캐시메모리도 여유 메모리에 포함되어 보여야 함.
캐시메모리 또한 여유 메모리로 계산하지 않는 착각으로 인해서 linuxatemyram란 싸이트도 있음 ㅋ.


sar -n DEV 1

  sar -n DEV 1

  Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015     _x86_64_    (32 CPU)

  12:16:48 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
  12:16:49 AM      eth0  18763.00   5032.00  20686.42    478.30      0.00      0.00      0.00      0.00
  12:16:49 AM        lo     14.00     14.00      1.36      1.36      0.00      0.00      0.00      0.00
  12:16:49 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

  12:16:49 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
  12:16:50 AM      eth0  19763.00   5101.00  21999.10    482.56      0.00      0.00      0.00      0.00
  12:16:50 AM        lo     20.00     20.00      3.25      3.25      0.00      0.00      0.00      0.00
  12:16:50 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  ^C

rzkB/s, txkB/s를 측정할 수 있음.
eth0의 수신량이 약 22Mbytes/s(21999.10rxkB/s)임. 이는 176Mbit/s 인데 한계인 1Gbit/s에 못 미치는 값임.
위 값중 %ifutil은 nicstat으로도 측정 가능한 네트워크 장치 사용율임. 그러나 nicstat이라 위 예나 정확한 값을 가져오긴 어려움.


sar -n TCP,ETCP 1

  sar -n TCP,ETCP 1

  Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)

  12:17:19 AM  active/s passive/s    iseg/s    oseg/s
  12:17:20 AM      1.00      0.00  10233.00  18846.00

  12:17:19 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
  12:17:20 AM      0.00      0.00      0.00      0.00      0.00

  12:17:20 AM  active/s passive/s    iseg/s    oseg/s
  12:17:21 AM      1.00      0.00   8359.00   6039.00

  12:17:20 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
  12:17:21 AM      0.00      0.00      0.00      0.00      0.00
  ^C

TCP 측정 요약을 보여줌.

  • active/s : 로컬에서 외부로 요청한 초당 TCP 커넥션 수를 보여줌.
  • passive/s : 원격으로 요청한 초당 TCP 커넥션 수를 보여줌.
  • retrans/s : 초장 TCP 재연결 수를 보여줌.

active와 passive 수를 보는 것은 서버의 부하를 대략적으로 측정하는데 편함.
localhost 끼리의 연결을 제외하면, 액티브를 아웃 바운드로, 패시브를 인 바운드로 보면 됨.
retransmits는 네트워크나 서버의 이슈가 있음 의미하는데 신뢰성이 떨어지는 네트워크 환경이나, 서버가 처리할 수 있는 용량 이상의 커넥션이 붙어서 패킷이 드랍되는 것을 의미함.
위 예제는 초당 하나의 TCP 연결이 들어옴을 알 수 있음.


top

top

top - 00:15:40 up 21:56,  1 user,  load average: 31.09, 29.87, 29.92
Tasks: 871 total,   1 running, 868 sleeping,   0 stopped,   2 zombie
%Cpu(s): 96.8 us,  0.4 sy,  0.0 ni,  2.7 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  25190241+total, 24921688 used, 22698073+free,    60448 buffers
KiB Swap:        0 total,        0 used,        0 free.   554208 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 20248 root      20   0  0.227t 0.012t  18748 S  3090  5.2  29812:58 java
  4213 root      20   0 2722544  64640  44232 S  23.5  0.0 233:35.37 mesos-slave
 66128 titancl+  20   0   24344   2332   1172 R   1.0  0.0   0:00.07 top
  5235 root      20   0 38.227g 547004  49996 S   0.7  0.2   2:02.74 java
  4299 root      20   0 20.015g 2.682g  16836 S   0.3  1.1  33:14.42 java
     1 root      20   0   33620   2920   1496 S   0.0  0.0   0:03.82 init
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kthreadd
     3 root      20   0       0      0      0 S   0.0  0.0   0:05.35 ksoftirqd/0
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     6 root      20   0       0      0      0 S   0.0  0.0   0:06.94 kworker/u256:0
     8 root      20   0       0      0      0 S   0.0  0.0   2:38.05 rcu_sched

top 명령어는 전반적으로 값을 확인하기 쉽고 위에서 체크한 다양한 측정치를 쉽게 볼 수 있음.
화면지 지속적으로 바뀌기 때문에 패턴을 찾기 어려운 단점으로 다음 단축키도 사용 가능함.

  • 일시 멈춤 : ctrl + s
  • 다시 시작 : ctrl + q


ETC

벤치마킹, 정적 성능 튜닝, 프로파일링 등 더 깊게 알기 위해서는 더 많은 명령과 방법이 있음.
Linux Perfomance Tool


 

다시 말하자면 위 내용은 넷플릭스 기술 블로그의 글을 참고하여 사용후 기록 할 필요를 느껴서 입맛대로 번역하여 올린 포스트 입니다.

원문보기

 

Linux Performance Analysis in 60,000 Milliseconds

You log in to a Linux server with a performance issue: what do you check in the first minute?

netflixtechblog.com

 

728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 인터넷 속도 확인  (0) 2021.05.28
[Linux] top  (0) 2021.05.06
[Linux] 리눅스 버전 확인하기  (0) 2021.05.06
[Linux] find 명령어  (0) 2021.05.03
[Linux] 서버 동시 접속자 수 확인 명령어  (0) 2021.03.31

리눅스에서 버젼이나 사양을 확인하는 방법은 여러가지 있다.
가끔 필요하니, 리눅스 버젼 확인 명령어와 커널을 확인하는 명령어를 기록 해 두자.

 


 

OS 버젼 확인 1

가장 대표적인 방법이다.

  cat /etc/*release*

  CentOS release 6.5 (Final)
  LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
  cat: /etc/lsb-release.d: 디렉터리입니다
  CentOS release 6.5 (Final)
  CentOS release 6.5 (Final)
  cpe:/o:centos:linux:6:GA

 

OS 버젼 확인 2

  cat /etc/issue

  CentOS release 6.5 (Final)
  Kernel \r on an \m

 

일반적인 커널 정보 확인

  uname -a
  Linux WAS2 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

 

OS bit 확인하기

  getconf LONG_BIT
  64
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] top  (0) 2021.05.06
[Linux] 리눅스 서버 60초 안에 상황 파악하기  (0) 2021.05.06
[Linux] find 명령어  (0) 2021.05.03
[Linux] 서버 동시 접속자 수 확인 명령어  (0) 2021.03.31
[Linux] 파일 압축 및 해제  (0) 2021.03.20

find는 리눅스에서 파일 또는 디렉토리를 계층구족로 검색할 때 사용함.
원하는 파일을 찾는데 오래 걸리긴 하지만 생각보다 활용도나 활용 빈도가 높아서 정리해 보기로 함.

 

명령어 구조

일반적인 리눅스 명령어와는 다르게 find 명령은 옵션보다 표현식이 더 많이 사용 됨.
검색 결과가 지정된 표현식의 조합에 따라 많이 달라짐.
(참조한 문서들에서 연산자 혹은 표현식, 명령어 등 표현이 다양해서 설명하다 용어가 바뀔 수 있음 주의.)

 

  find --help
  Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

  기본 경로로는 현재 디렉토리; 기본 표현식은 -print.
  표현식은 연산자, 옵션, 테스트 및 조치로 구성됨:

  연산자 (우선순위 감소; -다른 항목이 지정되지 않은 경우 암시적) :
        ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
        EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2

  위치 옵션 : -daystart -follow -regextype

  일반 옵션 (always true, 다른 표현식 앞에 지정됨):
        -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
        --version -xdev -ignore_readdir_race -noignore_readdir_race

  테스트 (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N
        -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
        -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
        -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
        -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN
        -readable -writable -executable
        -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
        -used N -user NAME -xtype [bcdpfls]
        -context CONTEXT


  실행 옵션 : -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print 
        -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
        -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
        -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;

 

옵션 DESC
-P 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용.
-L 심볼릭 링크에 연결된 파일 정보 사용.
-H 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외.
-D 디버그 메세지 출력

 

표현식 DESC
-name 지정된 문자열 패턴에 해당하는 파일 검색.
-empty 빈 디렉토리 또는 크기가 0인 파일 검색.
-delete 검색된 파일 또는 디렉토리 삭제.
-exec 검색된 파일에 대해 지정된 명령 실행.
-path 지정된 문자열 패턴에 해당하는 경로에서 검색.
-print 검색 결과를 출력. 검색 항목은 newline으로 구분(기본값).
-print0 검색 결과를 출력. 검색 항목은 null로 구분.
-size 파일 크기를 사용하여 파일 탐색.
-type 지정된 파일 타입에 해당하는 파일 검색.
-mindepth 검색할 하위 디렉토리 최소 깊이 지정.
-maxdepth 검색할 하위 디렉토리 최대 깊이 지정.
-atime 파일 접근(access) 시각을 기준으로 파일 검색.
-ctime 파일 내용 및 속성 변경(change) 시각을 기준으로 검색.
-mtime 파일의 데이터 수정(modify) 시각을 기준으로 검색.

 

표현식 사용시 연산자를 이용하면 두 개 이상의 표현식 조합이 사용가능.
find 명령에서 두 개 이상의 표현식을 사용할 경우 연산자를 지정하지 않으면 기본적으로 AND 연산자가 적용됨.

표현식 DESC
(expression) expression 우선순위 지정.
!expression  
-not expression expression 결과에 NOT 연산
expression -a expression  
expression -and expression  
expression expression expression 간 AND 연산
expression -o expression  
expression -or expression expression 간 OR 연산

 


 

find 명령 사용 예제

현재 디렉토리 내에서 지정된 이름의 파일을 찾는 것은 간단함.
find 명령 뒤에 파일 이름을 지정하면 됨.

  [root@ASDF ~]# ls
  WAS-2.csv  anaconda-ks.cfg  install.log  install.log.syslog  watch.sh  공개  다운로드  문서  바탕화면  비디오  사진  음악  템플릿

  [root@ASDF ~]# find watch.sh
  watch.sh

보통 현재 디렉토리에서 파일을 찾을 땐 ls | grep 이거로 찾기 때문에 현재 디렉토리와 하위 디렉토리에 위치한 파일을 찾을 경우에는 find . -name "이거"를 사용함.

 

요약 예제

설명
find 현재 디렉토리에 있는 파일 또는 디렉토리 리스트 표시.
find [PATH] 대상 디렉토리에 있는 파일 또는 디렉토리 표시.
find . -name [FILE] 현재 디렉토리 및 하위 디렉토리에서 파일 또는 디렉토리 검색.
find / -name [FILE] 전체 파일 시스템에서 파일 검색.
find . -name "STR*" 이름이 특정 문자열로 시작하는 파일 검색.
find . -name "*STR" 이름이 특정 문자열로 끝나는 파일 검색.
find . -name "STR" 이름에 특정 문자열이 포함된 파일 검색.
find . -empty 크기가 0인 파일 또는 디렉토리 검색.
find . -name "*.EXT" -delete 특정 확장자를 가진 모든 파일 검색 후 삭제.
find . -name [FILE] -print0 검색된 리스트를 줄 바꿈 없이 이어서 출력
find . -name [FILE] -type f 파일 또는 디렉토리만 검색하기
find . -size +[N]c -and -size -[M]c 파일의 크기를 사용하여 파일 검색.
find . -name [FILE] -exec ls -l {} ; 검색됱 파일에 대한 상세 정보 출력.
find . -name [FILE] -exec grep "STR" {} ; 검색된 파일에서 문자열 찾기
find . -name [FILE] > [SAVE_FILE] 검색 결과를 파일로 저장.
find . -name [FILE] 2> /dev/null 검색 중 에러 출력하지 않기.
find . -maxdepth 1 -name [FILE] 하위 디렉토리 검색하지 않기.
find . -name [FILE] -exec cp {} [PATH] ; 검색된 파일 복사.

 

 


 

예제

 

현재 디렉토리에 있는 파일 및 디렉토리 리스트 표시

옵션 없이 find 명령만 사용하면 현재 디렉토리에 있는 모든 파일과 디렉토리(하위 디렉토리를 포함) 표시.
주로 디렉토리의 파일 리스트를 다른 명령으로 전달, 처리할 때 사용함.

  # 현재 디렉토리의 파일 및 디렉토리 출력.
  find

  # 현재 디렉토리의 모든 내용을 줄 바꿈 없이 출력.
  find -print0


대상 디렉토리에 있는 파일 및 디렉토리 리스트 표시

대상 디렉토리에 있응 파일 및 디렉토리 리스트 표시.

  find [PATH]


현재 디렉토리 아래 모든 파일 및 하위 디렉토리에서 파일 검색

현재 디렉토리에 포함 된 모든 하위 디렉토리 및 파일에서 지정된 파일을 검색.

  find . -name [NAME]


전체 파일 경로에서 검색

디렉토리 경로를 루트(/)로 지정하여 전체 경로에서 검색.

  find / -name "NAME"


파일 이름이 특정 문자열로 시작하는 파일 검색

특정 문자열로 시작하는 파일 검색.

  find . -name "STR*"


파일 이름에 특정 문자열을 포함하는 파일 검색

  find . -name "*STR*"


파일 이름이 특정 문자열로 끝나는 파일 검색

  find . -name "*STR"


빈 디렉토리 또는 크기가 0인 파일 검색

-empty 옵션을 넣으면 빈 디렉토리 또는 크기가 0인 파일 검색 가능.

  # 빈 디렉토리 또는 크기가 0인 파일 검색.
  find . -empty

  # STR 이라는 이름의 빈 디렉토리 또는 크기가 0인 파일 검색.
  find . -name STR -empty


특정 파일을 검색 후 삭제

-delete 옵션을 사용하면 검색된 파일 및 디렉토리를 삭제함.
검색 결과의 디렉토리가 비어있지 않으면 삭제되지 않음.

  find . -empty -delete


검색된 결과를 줄 바꿈 없이 이어서 출력

find의 기본 옵션이 -print인데, -print0 옵션을 주게 되면 줄 바꿈 없이 출력 가능.

  # 검색 결과를 줄 바꿈으로 구분하여 출력
  find .
  find . -print

  # 검색 결과를 줄 바꿈 없이 출력.
  find . -print0


파일 또는 디렉토리만 검색하기

-type 옵션을 사용하여, 파일의 종류를 지정할 수 있음.

  • d : directory special
  • f : regular file
  • l : symbolick link
  # 이름에 A가 포함되는 일반 파일 검색
  find . -name "*A*" -type f

  # 이름에 A가 포함되는 디렉토리 검색
  find . -name "*A*" -type d


파일의 크기를 이용하여 검색

-size 옵션을 사용하면 파일의 크기로 찾을 수 있음.
기본적으로 block 단위르 사용함. 파일 크기 뒤에 b, c, w, k, M, G 를 붙임으로 단위를 바꿔 조회 가능.

  • b : block
  • c : bytes
  • w : 2bytes
  • k : kb
  • M : MB
  • G : GB

크기 앞에 +(초과), -(미만)으로 범위 조건을 부여 가능하며, -size 옵션을 조합하여 크기의 범위를 사용 가능.

  # 파일 크기가 1024 bytes인 파일 검색.
  find . -size 1024c
  # 파일 크기가 1024 bytes를 초과하는 파일 검색.
  find . -size +1024c
  # 미만인 파일 검색.
  find . -size -1024c
  # 1024 초과, 2048 미만
  find . -size +1024c -size -2048c


검색된 파일에 대한 상세 정보 출력

-exec 옵션으로 검색된 결과를 이용해 다른 명령 실행 가능.

  ls
  BbsAuthorBindingInterceptor.class   LoginAuthorBindingInterceptor.class            ProgrmAuthorBindingInterceptor.class           TemplateBindingInterceptor.class              TemplateMainBindingInterceptor.class-bk_20210209
  ControllerInterceptor.class         NeoAuthorBindingInterceptor.class              ProgrmAuthorBindingInterceptor.class-20210320  TemplateBindingInterceptor.class-bk_20210203
  ControllerInterceptorAdapter.class  NeoAuthorBindingInterceptor.class-bk_20210407  StaffAuthorInterceptor.class                   TemplateMainBindingInterceptor.class

  # 현재 디렉토리에서 *.class 파일들의 상세정보 출력
  find . -name "*.class" -exec ls -al {} \;
  -rw-rw-r-- 1 user user 6475 2021-03-20 16:17 ./ProgrmAuthorBindingInterceptor.class
  -rw-r--r-- 1 user user 2273 2019-12-07 22:58 ./StaffAuthorInterceptor.class
  -rw-rw-r-- 1 user user 5819 2016-03-17 18:00 ./BbsAuthorBindingInterceptor.class
  -rw-rw-r-- 1 user user 1323 2015-08-24 16:54 ./ControllerInterceptor.class
  -rw-r--r-- 1 user user 4948 2021-01-15 12:33 ./LoginAuthorBindingInterceptor.class
  -rw-rw-r-- 1 user user 8673 2021-04-07 09:41 ./NeoAuthorBindingInterceptor.class
  -rw-r--r-- 1 user user 5455 2019-12-08 14:22 ./ControllerInterceptorAdapter.class
  -rw-rw-r-- 1 user user 3728 2021-02-09 15:56 ./TemplateMainBindingInterceptor.class
  -rw-r--r-- 1 root root 13309 2021-02-09 15:56 ./TemplateBindingInterceptor.class


검색된 파일의 라인 수 출력

find 명령과 wc 명령을 조합하여 검색된 파일의 문자 수 또는 라인수를 계산하여 출력 가능.

  ls -al
  합계 416
  -rw-r--r--.  1 root root   1462 2020-12-07 13:08 addrlink.js
  -rw-r--r--.  1 root root   1086 2015-08-06 15:41 admin.js
  -rw-r--r--.  1 root root  11208 2021-01-09 02:13 calendar.js
  -rw-r--r--.  1 root root   3027 2021-01-21 13:31 default.js
  -rw-r--r--.  1 root root   3027 2021-02-02 16:50 default.js-remote-20210202.js
  -rw-r--r--.  1 root root  97162 2020-12-07 13:08 jquery-1.12.4.min.js
  -rw-r--r--.  1 root root   2049 2020-02-18 14:28 lay_pop.js
  -rw-r--r--.  1 root root   2975 2017-09-28 10:59 map.js
  -rw-r--r--.  1 root root 136334 2020-03-23 11:10 program.js
  -rw-r--r--.  1 root root  82602 2020-03-23 11:10 program.min.js
  -rw-r--r--.  1 root root  10587 2015-08-06 15:41 tariff.js

  find . -name "*.js" -exec wc -l {} \;
  63 ./addrlink.js
  44 ./admin.js
  385 ./calendar.js
  146 ./default.js
  146 ./default.js-remote-20210202.js
  4 ./jquery-1.12.4.min.js
  73 ./lay_pop.js
  51 ./map.js
  2234 ./program.js
  0 ./program.min.js
  353 ./tariff.js


검색 된 파일에서 문자열 검색

find 과 grep을 조합해서, 검색된 파일안의 특정 문자열 찾기 가능.

  # .js 파일에 문자열 function이 있는지 검색
  find . -name "*.js" -exec grep "function" {} \;

  # .js 파일에 문자열 "reduce"가 있는 라인 표시
  find . -name "*.js" -exec grep -n "reduce" {} \;


검색중 에러 메세지 출력하지 않기

find 명령 실행중 접근 권한으로 에러가 나는 경우가 있음.
표준 에러 2가 발생할 경우 /dev/null로 redirection 시켜 출력을 하지 않을 수 있음.

  find / -name "*a*" 2> /dev/null


하위 디렉토리 검색하지 않기

-maxdepth 옵션을 사용하면 검색할 하위 디렉토리의 깊이 제한 가능함.
-maxdepth 옵션은 다른 옵션보다 먼저 사용해야 함.

  find / -maxdepth 1 -name "sys"


검색 된 파일 복사

cp 명령과 조합하여 검색 된 파일을 지정된 디렉토리에 복사 가능.

  find . -name "*.class" -exec sp {} /bk/ \;
728x90
반응형

?

제목을 어떻게 지어야 할지 모르겠어서 일단 이렇게 둔다.
한번에 작성 하기도 어렵고 작업한지도 좀 오래 되서 기억을 더듬어야 하므로 계속해서 업데이트 될 예정.

사건의 발단

현재 회사에서 맡고있는 프로젝트의 WAS 중 하나가 자꾸 죽는 문제가 생겼었다.
원인은 파악 안 되고, 평일, 휴일, 밤 낮 구분없이 셧다운이 되니 미칠 노릇이였고.
원인 해결이 우선이긴 하지만 먼저 WAS가 다운되면 일단 자동으로 다시 살리도록 하기로 했다.

 

  

  

cron으로 서버 상태 확인 shell,

서버 재시작 shell

tomcat 7문제

JVM의 GC 설정

728x90
반응형

'WEB > SERVER_SIDE' 카테고리의 다른 글

[Linux] Tomcat 재시작 하는 스크립트  (0) 2020.11.13
watch -n 1 'netstat -nap | grep :80 | grep ESTABLISH | wc -l'

 

728x90
반응형

아래 정규표현식은 html 태그를 제거하기 위한 식으로 모든 태그를 제거함.
html 태그가 포함된 src라는 문자열에서 <tag></tag>를 '' 빈 문자열로 치환해 줌.

  const extractTextPattern = /(<([^>]+)>)/gi;

 

모든 태그 제거하기

  <div id="target">
    <h1>This Content is target</h1>
    <span>to replace</span>
    .
  </div>

아래 코드로 위의 #target 엘리먼트를 innerHTML을 통해 하위 모든 문자열을 불러온 후 담은 태그들을 제거할 것임.

  let target = document.getElementById('target');

  let src = target.innerHTML;
  console.log( src );
  /**
   * ->
   * <h1>This Content is target</h1>
   * <span>to replace</span>
   * .
   */
  let extractedText = src.replace(extractTextPattern, '');
  console.log( extractedText );
  /**
   * ->
   * This Content is target
   * to replace
   * .
   */

모든 태그 요소가 제거되어 안의 텍스트만 꺼낼 수 있음.

 

원하는 태그만 제거하는 방법

모든 태그가 아닌 내가 원하는 태그만 선택하여 제거하는 방법도 있음.
h1 태그만 없애고 싶다면, 다음 패턴을 사용하면 됨.

  const extractSpanPattern = /<(\/h1|h1)([^>]*)>/gi;

  let eraseSpan = src.replace(extractSpanPattern, '');
  console.log( eraseSpan );
  /**
   * ->
   * This Content is target
   * <span>to replace</span>
   * .
   */

 

script 태그와 javascript 소스까지 제거하는 패턴

종종 script 태그와 js 소스까지 지워야 하는 경우도 있음.
이럴 경우에는 패턴을 다음과 같이 사용하면 됨.

  const jsPttrn = /<script[^>]*>((\n|\r|.)*?)<\/script>/gim;

참고로 css 태그와 css 소스까지 지우고 싶다면,

  const cssPttrn = /<style[^>]*>((\n|\r|.)*?)<\/style>/gim;

 

플래그를 사용한 정규표현식 고급 사용법

정규 표현식은 여섯 개의 옵션이 있음. 이를 통해 전역 검색 또는 대소문자 구분 없는 검색등을 할 수 있음.

options description
g 전역검색. 종종 g 옵션을 몰라서 replaceAll이라는 함수를 새로 만들어 사용한 코드도 있음.
i 대소문자 구분 없는 검색
m 다중행 (multiline) 검색
s . 에 개항 문자 매칭 (ES2018)
u 패턴을 유니코드 코드 포인트의 나열로 취급합.
y 'sticky' 검색 수횅. 문자열의 현재 위치부터 검색을 수행함.
728x90
반응형

압축

tar 압축

  tar -cvf [파일명.tar] [폴더|파일명]

  # a 라는 폴더를 a.tar로 압축
  tar -cvf a.tar a

tar 압축 해제

  tar -xvf [파일명.tar]

  # a.tar라는 tar 파일 압축해제 예시
  tar -xvf a.tar
option desc
-c compress 압축
-x extract 해제, 추출
-z gzip으로 작업
-v 작업 과정의 파일들 command line에 출력
-f 파일 이름 지정
-p 파일 권한 저장
-C 대상 경로 지정

tar.gz 압축

  tar -zcvf [파일명.tar.gz] [폴더|파일명]

  # a라는 폴더를 a.tar.gz으로 압축
  tar -zcvf a.tar.gz a

tar.gz 압축 해제

  tar -zxvf [파일명.tar.gz]

  # a.tar.gz라는 tar.gz 파일 압축 해제
  tar -zxvf a.tar.gz

zip 압축

  zip [파일명.zip] [폴더|파일명]

  # 현재폴더 전체를 a.zip으로 압축
  zip a.zip ./*

  # a.zip으로 압축하고 현재 폴더의 모든 것과 현재 폴더의 **하위 폴더들**도 모두 압축
  zip a.zip -r ./*

zip 압축 해제

  unzip [파일명.zip]

  # a.zip 압축 해제
  unzip a.zip

  # 특정 폴더에 압축 해제
  unzip a.zip -d ./경로

728x90
반응형

리눅스나 MacOS 는 tail 함수가 내장 되어 있기 때문에 서버의 로그를 실시간으로 보는 법은 간단하다.

Window의 경우는 cmd 상에서 명령어가 있긴 하지만, 버젼에 따라 없거나, 옵션 값도 달라지고 cli의 ux가 좋지 않기 때문에 차라리 써드파티 어플리케이션을 사용하는 게 낫다.

mtail 이라는 프로그램인데, 설치는 필요 없고, 아래 링크에서 다운로드 후 압축을 풀고 실행, 대상 파일을 불러와 주기만 하면 된다.

 

프로그램 다운로드 -> http://ophilipp.free.fr/op_tail.htm

728x90
반응형

+ Recent posts