From 98a59676645a4c9d135ee0d2428b93dba3895880 Mon Sep 17 00:00:00 2001 From: ButterYoon Date: Sat, 11 Nov 2023 22:34:03 +0900 Subject: [PATCH] =?UTF-8?q?bash=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _posts/2023-10-29-bash.md | 69 ++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/_posts/2023-10-29-bash.md b/_posts/2023-10-29-bash.md index caeb5ca..1f4edae 100644 --- a/_posts/2023-10-29-bash.md +++ b/_posts/2023-10-29-bash.md @@ -5,7 +5,7 @@ title: "BASH 스크립트로 서비스 부하 테스트 하기" description: "서비스 API 성능 테스트를 위해 쉘 스크립트를 만들어본다." img: command-title.webp date: 2023-10-29 11:00:00 +0900 -last_modified_at: 2023-10-29 11:00:00 +0900 +last_modified_at: 2023-11-11 22:00:00 +0900 tags: [command-line, bash, script, load test] # add tag related: command-line categories: tools @@ -23,9 +23,11 @@ categories: tools ## 순차적으로 증가하는 일련번호 만들기. -기준이 되는 데이터가 필요한데 순차적으로 증가하는 일련번호가 필요하다. +서비스 시뮬레이션을 위해 기준이 되는 정보가 필요한데 데이터는 텍스트 파일에서 읽어오기로 한다. -엑셀로 만들어도 되겠지만 터미널에서 **vim**으로 선택된 영역의 숫자를 순차적으로 증가시킬 수 있다. +데이터에는 순차적으로 증가하는 일련번호가 필요해서 아래와 같이 **vim**을 이용해보자. + +엑셀로 만들어도 되겠지만 터미널에서 **vim**으로 일련번호를 만들어보자. > vim의 명령어 모드에서 > **Ctrl-v** 로 원하는 영역에 "Visual Block"을 설정하고. @@ -34,56 +36,55 @@ categories: tools ```text $ cat application.lst -D0002, 7000002, I, A, 1528100002 -D0003, 7000003, I, A, 1528100003 -D0004, 7000004, I, A, 1528100004 -D0005, 7000005, I, A, 1528100005 -D0006, 7000006, I, A, 1528100006 -D0007, 7000007, I, A, 1528100007 -D0008, 7000008, I, A, 1528100008 -D0009, 7000009, I, A, 1528100009 -D0010, 7000010, I, A, 1528100010 -D0011, 7000011, I, A, 1528100011 +D0002,7000002,I,A,1528100002 +D0003,7000003,I,A,1528100003 +D0004,7000004,I,A,1528100004 +D0005,7000005,I,A,1528100005 +D0006,7000006,I,A,1528100006 +D0007,7000007,I,A,1528100007 +D0008,7000008,I,A,1528100008 +D0009,7000009,I,A,1528100009 +D0010,7000010,I,A,1528100010 +D0011,7000011,I,A,1528100011 ``` ## 콤마(,)로 구분된 텍스트 파일 읽어 loop -아래와 같이 while loop 의 IFS(필드 분리자)를 콤마(,)로 설정하고 읽어 올 변수를 설정하면 FILE의 라인 수만 큼 loop가 반복된다. +만들어진 데이터를 순서대로 읽어 API로 던질 포맷을 만들어 일정한 간격으로 전송하려고 할 때 아래와 같이 while loop 의 IFS(필드 분리자)를 콤마(,)로 설정하고 읽어 올 변수를 설정하면 FILE의 라인 수만 큼 loop가 반복된다. ```bash FILE='application.lst' # main loop -echo "START : "`date +%T.%3N` -while IFS=',' read col1 col2 col3 col4 col5 +echo "START : "`date +%T.%3N` # 시작시간을 마이크로초 단위로 기록 +while IFS=',' read col1 col2 col3 col4 col5 # WHILE 루프 do # action echo "docid=$col1 appid=$col2 inout=$col3 type=$col4 cid=$col5" sleep 0.01 -done < $FILE -echo "END : "`date +%T.%3N` +done < $FILE # 파일 읽기 +echo "END : "`date +%T.%3N` # 종료시간을 마이크로초 단위로 기록 +# 터미널 출력 결과 START : 01:44:54.887 -docid=D0002 appid= 7000002 inout= I type= A cid= 1528100002 -docid=D0003 appid= 7000003 inout= I type= A cid= 1528100003 -docid=D0004 appid= 7000004 inout= I type= A cid= 1528100004 -docid=D0005 appid= 7000005 inout= I type= A cid= 1528100005 -docid=D0006 appid= 7000006 inout= I type= A cid= 1528100006 -docid=D0007 appid= 7000007 inout= I type= A cid= 1528100007 -docid=D0008 appid= 7000008 inout= I type= A cid= 1528100008 -docid=D0009 appid= 7000009 inout= I type= A cid= 1528100009 -docid=D0010 appid= 7000010 inout= I type= A cid= 1528100010 -docid=D0011 appid= 7000011 inout= I type= A cid= 1528100011 +docid=D0002 appid=7000002 inout=I type=A cid=1528100002 +docid=D0003 appid=7000003 inout=I type=A cid=1528100003 +docid=D0004 appid=7000004 inout=I type=A cid=1528100004 +docid=D0005 appid=7000005 inout=I type=A cid=1528100005 +docid=D0006 appid=7000006 inout=I type=A cid=1528100006 +docid=D0007 appid=7000007 inout=I type=A cid=1528100007 +docid=D0008 appid=7000008 inout=I type=A cid=1528100008 +... END : 01:44:55.006 ``` ## bash 시간 포맷 -아래와 같이 date 명령어로 시간 포맷을 정할 수 있다. +시뮬레이션을 하는 동안 기록한 시간은 마이크로초 단위가 필요하고 아래와 같이 date 명령어로 시간 포맷을 정할 수 있다. > %T : %H:%M:%S 형식으로 시:분:초를 표시한다. -> %N : nanoseconds 단위를 표시한다. +> %N : nanoseconds 단위를 표시한다. > %3N : 소수점 이하 3자리 까지 표시 ```bash @@ -94,11 +95,11 @@ END : 01:44:55.006 01:57:52.356 ``` -## 경과 시간 구하기 +## 경과 시간 구하기 (ChatGPT ) -구글 검색을 돌렸더니 **chatGPT** 플러그인이 튀어나와 아래처럼 하라고 한다. +트랜잭션 단위로 경과시간을 구하기 위해 구글 검색을 돌렸더니 **chatGPT** 플러그인이 튀어나와 아래처럼 하라고 한다. -> **date +%s** : 현재 시간을 초 단위로 변환하여 저장. +> **date +%s** : 현재 시간을 초 단위로 변환하여 저장. ```bash 시작_시간=$(date +%s) @@ -110,7 +111,7 @@ END : 01:44:55.006 echo "작업에 소요된 시간: $경과_시간 초" ``` -## 밀리세컨드 단위 경과 시간 구하기 +## 밀리세컨드 단위 경과 시간 구하기 (ChatGPT) 다시 **elapsed time milliseconds in bash** 로 검색했더니 아래처럼 알려준다.