본문 바로가기

전체 글

(56)
GC 로그 분석 툴 - jstat 사용법 GC(Garbage Collection) 란? 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다. (출처 : 위키백과) GC 로그 분석이 필요한 이유? 프로그램의 성능 문제나 메모리 관련 이슈(OOM 등) 발생 시 GC 로그 분석을 통해서 원인 파악 및 해결책(GC 튜닝 등)을 찾을 수 있다. 왜 jstat를 사용하는가? Java HotSpot VM에 내장된 API를 사용하므로 추가 설치나 jvm옵션이 필요없고 동작 중인 서비스에 영향을 주지 않는다. 사용예제 jdk 설치 시 $JAVA_HOME/bin/jstat 유틸리티를 아래와 같이 여러 옵션을 추가하여 사용할 수 있다. 1. jstat -gcutil PID가 29597인 프로세스에 ..
Telnet Shell 텔넷 접속 후 데이터 전송 까지 순서대로 실행하는 쉘파일 만들기 telnet 명령어를 통한 반복적인 데이터 전송 테스트를 해야하는 경우 쉘파일로 구성하여 자동화 해보자 ( echo 'open 10.0.2.15 10000' sleep 3 echo '0012TESTDATA' sleep 3 echo 'exit' ) | telnet10.0.2.15서버 10000포트에 접속 후 00012TESTDATA 라는 12Bytes 길이의 데이터를 전송 후 접속을 종료한다 명령어 중간중간 3초 간격을 줬다 telnet.sh 과 같이 파일로 만들어 놓고 실행하면 순서대로 동작하는 것을 볼 수 있다
유용한 윈도우 단축키 모음 (범용성) 범용적으로 많이 사용하는 단축키 몇 개만 익혀놔도 엄청 유용하니 꼭 알아두자. (일할 때 살짝 있어 보이는 효과는 덤) Win+R(Run) : 실행 Win+S(Search) : 검색 Win+E(Explorer) : 파일 탐색기 실행 Win+D(Drop?) : 실행 중인 창 전부 최소화 Win+숫자(1~9) : 작업표시줄에 있는 실행 중인 작업 열기 Win+⬆️ : 창 최대화 Win+⬇️ : 창 최소화(이전크기로) Win+⬅ : 창 왼쪽정렬 Win+️➡️ : 창 오른쪽정렬 Tab : 각 프로그램별로 지정해 놓은 순서대로 탭 이동 Shift+Tab : 역순으로 탭 이동 Alt+Tab : 창 최소화/열기 Alt+F4 : 프로그램 종료 Ctrl+W : 프로그램 종료 Ctrl+C(Copy) : 복사 Ctrl+V ..
TCP 통신 동작 과정 움짤로 한눈에 알아보기 TCP 통신 과정을 쉽게 이해하기 위한 수단 중 하나는 그림이나 영상을 통해서 실제 동작 과정을 머리속으로 이미지화 해보는 것이라고 생각한다. 반대로 TCP통신 과정을 그려내지 못한다면 제대로 이해하지 못하고 있는 것이다. 그림은 두 서버간 데이터를 송수신할 때 각 Layer에서의 처리과정과 데이터 표현방식을 한눈에 볼 수 있도록 정리한 내용이다. Layer1~7은 OSI 7계층을 의미하며, 편의상 L5~L7은 묶어서 표현했다. 네크워크 상에서 데이터는 Packet단위로 쪼개져서 송수신 되기때문에 Client와 Server는 I/O Buffer를 사용해서 송수신 되는 Packet들을 Buffer에 임시로 저장하고 읽으면서 순서에 맞게 분해하고 조립하는 과정이 필요하다. 또한 Packet이 각 Layer를..
자바 한글 인코딩 변환 (utf-8 to euc-kr java) 인코딩, 디코딩을 이해하기 위해서 선행되어야 할 개념으로 Binary(바이너리)가 있다 Binary란? 사람이 이해할 수 있는 문자를 컴퓨터가 이해할 수 있는 이진법(0,1)으로 표현한 표현식, 이진파일을 의미한다 문자를 바이너리로 변환하는 것을 인코딩 바이너리를 문자로 변환하는 것을 디코딩 이라고 한다 그리고 우리가 많이 사용하는 UTF-8, EUC-KR 등은 인코딩 방식 중 하나이다 그렇다면 자바에서는 어떻게 사용할까? 자바에서는 대표적으로 문자는 String타입을 바이너리는 byte array타입을 사용한다 즉, String을 byte[]로 변환할 때 인코딩 byte[]를 String으로 변환할 때 디코딩을 사용해주면 된다. 예제로 보면 아래와 같다 try{ //String을 byte[]로 인코딩 ..
TCP 통신 서버/클라이언트 요청/응답 인바운드/아운바운드 차이 및 정확한 개념 제목에 열거된 것들은 TCP통신 시 사용하는 기본 용어들인데 그 정확한 개념을 이해하고 사용하는 사람은 생각보다 많지 않다 (경험상 최소 50%는 정확히 알지 못한다) 일반적으로 이렇게 세트로 알고 있는 경우가 많다 클라이언트가 아웃바운드로 요청을 보내면 서버는 인바운드로 요청을 받고 응답을 보낸다 위 예시가 틀린건 아니지만 반드시 저렇게 세트로 동작하진 않는다 만약 아래와 같은 질문을 받는다면? Q. 연결방식은 서버인데 수신거래는 1111 포트로 요청받아서 해당 세션으로 응답을 보내고 송신 거래의 요청은 상대방 2222포트로 보내고 응답은 수신거래랑 같은 포트(1111)를 사용할 수 있나요? 질문이 복잡해 보이지만 상호간 회선을 정의하는데 기본적으로 설정해야 되는 내용들이다 감이 잘 안오거나 헷갈린다면..
[IT] AIX 포트정보로 프로세스 확인 netstat rmsock tcpcb 리눅스에서는 포트정보로 사용중인 프로세스를 알아내는 건 간단하다 netstat -anp | grep PORT -p 옵션을 주면 PID가 바로 나온다 (하지만 -p 권한이 없는 경우가 많음) 서버가 AIX라면? 절차는 조금 복잡하지만 권한적인 측면에서는 AIX가 조금 더 낫다 먼저 netstat에 -A옵션를 주고 포트로 검색한다 netstat -Aan | grep PORT 결과값 맨 앞행에 프로토콜 블럭주소가 나오고 블럭주소를 rmsock의 인자로 넘긴다 rmsock 블럭주소 tcpcb rmsock의 결과로 PID를 확인할 수 있고 PID를 인자로 ps명령어를 실행하면 ps -ef | grep PID 프로세스 정보를 확인할 수 있다. 예제로 보면 아래와 같다 $ netstat -Aan | grep 9830..
"그쪽 네트워크 문제 아니에요?" 네트워크 분쟁의 해결사 TCPDUMP 사용법 (생성~분석) 서로 다른 시스템간에 인터페이스를 하다보면 가장 쉽게 발생하는 문제 중 하나가 바로 네트워크 오류인데, 잘 알지 못하면 또 이것만큼 해결이 어려운 문제가 없다. 왜냐? 서로 남탓을 하기 아주 딱 좋은 문제이기 때문이다. 그리고 서로 잘못이 없다고 우길 때, 이 분쟁의 해결사로 가장 먼저 등장하는 카드가 바로 tcp dump이다. "아무리 봐도 우리쪽 시스템은 문제는 없는거 같은데 갑자기 연결이 끊겼어요. 그쪽 네트워크 문제 아니에요?" "tcpdump를 떠보니 18시18분18초에 그쪽에서 Fin을 보낸게 확인 되네요. 확인 좀 해주세요." 같은 상황이지만 전자의 경우 갈등이 시작되고, 후자의 경우 갈등이 해결된다. 그럼 후자가 되기위해 리눅스에서 사용할 수 있는 가장 간단한 tcpdump 사용법과 분석법..