[Java Tool] jstat

http://download.oracle.com/javase/6/docs/technotes/tools/share/jstat.html

JVM 퍼포먼스 통계치를 보여준다. GC 튜닝할 때 사용하는 주요 툴.

jstat 제너럴옵션 | 출력옵션 vmid 인터벌 횟수

제너럴옵션

  • help: 잘 나옴.
  • version: 이건 잘 안됨.
  • options: 출력 옵션 목록 보기.

출력 옵션
class: 클래스로더 통계

  • Loaded: 로딩한 클래스 수
  • Bytes: 로깅한 클래스 용량(Kbytes)
  • Unloaded: 언로딩한 클래스 수
  • Bytes: 언로딩한 클래스 수
  • Times: 로딩/언로딩 수행하는데 걸린 시간(총계일듯)

compiler: 핫스팟 JIT 컴파일러 통계

gc: 힙 영역 GC 통계

gccapacity: 전체 메모리 영역 사이즈 통계

  • NGCMN: 뉴 영역 최소 크기
  • NGCMX: 뉴 영역 최대 크기
  • NGC: 현재 뉴 영역 크기
  • S0C: 현재 서바이버 0영역 크기
  • S1C: 현재 서바이버 1영역 크기
  • EC: 현재 에덴 영역 크기
  • OGCMN: 올드 영역 최소 크기
  • OGCMX: 올드 영역 최대 크기
  • OGC: 현재 올드 영역 크기
  • PGCMN: 펌 영역 최소 크기
  • PGCMX: 펌 영역 최대 크기
  • PGC: 현재 펌 영역 크기
  • YGC: 영 GC 발생 수
  • FGC: 풀 GC 발생 수

gcutil: GC 통계

  • S0: 서바이버 0영역 현재 용량 비율(현재 먹고 있는거/전체 * 100 %)
  • S1: 서바이버 1영역 현재 용량 비율
  • E: 현재 에덴 영역 용량 비율
  • O: 현재 올드 영역 용량 비율
  • P: 현재 펌 영역 용량 비율
  • YGC: 영 영역 GC 발생 수
  • YGCT: 영 영역 GC 수행 시간(누적)
  • FGC: 풀 GC 발생 수
  • FGCT: 풀 GC 수행 시간(누적)
  • GCT: 전체 GC 수행 시간(누적)

gccause: gcutil과 비슷한데 GC cause를 보여준다.

gcnew 뉴 영역 GC 통계

gcnewcapacity: 뉴 영역 사이즈 통계

gcold
gcoldcapacity
gcpermcapacity
printcompilation: 핫스팟 컴파일 메서드 통계


[Java Tool] jps

http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

자바 프로세스 확인할 수 있는 툴. JVM홈/bin 디렉토리에 들어있는 명령어기 때문에 보통 PATH로 지정되어 있을테니 그냥 사용하면 된다.

톰캣을 띄워놓고 jps를 입력해봤다.

옵션
-q: 프로세스 이름을 생략한다. (비추)

-m: 메인 메서드로 전달한 인자값 보여준다.

-l: 메인 클래스 또는 애플리케이션의 JAR 파일 전체 경로를 보여준다.

-v, -V, -J는 생략


Nginx 주요 설정

http://blog.martinfjordvald.com/2010/07/nginx-primer/

Nginx는 우선 리버스 프록시이고 그 다음이 HTTP 서버라는 점이 중요하다.

Nginx 설정에 있어서 가장 먼저 알아야 할 것은 설정 파일의 계층 구조다. 상위 블럭의 설정이 하위 블럭의 기본값으로 사용된다. 물론 하위 설정에서 재정의 할 수도 있다.

보통 3 블럭으로 나뉜다.

  • HTTP 블럭
  • server 블럭
  • location 블럭

http{

server {

location {

}
}

}

event 블럭과 root 블럭(event 블럭과 HTTP 블럭을 포함하는 블럭)도 있지만 이 둘은 잘 다루지 않는다. 주로 위의 세가지 블럭을 다룬다.

server 블럭은 아파치의 virtual host로 볼 수 있있고, location 블럭은 URI로 볼 수 있다.

Virtual Hosts

가장 눈여겨 볼 설정은 server_name과 root다. HOST 헤더가 server_name에 대응하면 해당 server 블럭을 사용하라고 지시하는것이고, root는 파일을 찾을 루트를 지정한다.

server {
listen 80;
server_name domain.com *.domain.com;
rewrite ^ http://www.domain.com$request_uri permanent;
}

server {
listen 80;
server_name www.domain.com;

index index.html;
root /home/domain.com
}virtual host 두 개를 설정했다. 첫번째 설정은 domain.com또는 www를 제외한 domain.com의 서브 도메인에 해당하는 server 블럭 설정이다. Nginx는 가장 구체적으로 대응하는 것을 선택하기 때문에 www.domain.com은 두번째 블럭에 대응한다.

server {
listen 80 default_server;
server_name _;

index index.html;
root /var/www/default
}

이 설정은 default virtual server를 설정한 것이다. default_server 플래그를 추가하면 HOST 헤더가 없거나 server 블럭 중 대응하는 것이 없을 때 이 곳으로 오게된다. server_name에 설정한 _; 값은 nothing에 해당한다. 아무것도 대응하지 않도록 할 때 사용할 수 있는데 server_name을 아에 정의하지 않을 수도 있다.

Locations

Nginx에서는 보통 복잡한 rewrites 대신 location을 사용한다.

http://wiki.nginx.org/NginxHttpCoreModule#location

server {
listen 80 default;
server_name www.domain.com;

root /home/domain.com

# This will match any URI beginning with /forum
location /forum {
# We capture the URI and redirect it to the subdomain.
rewrite forum(.*) http://forum.domain.com$1 permanent;
}
}

server {
listen 80;
server_name forum.domain.com;

index index.php;
root /home/domain.com/forum;
}

/forum으로 요청이 오면 새로운 서브 도메인으로 보낸다.

나머지 생략


이런.. 또 오랜만에 부정행위를 저질렀다.

사실 얼마전까지 부정헹위을 저질렀다는 사실조차 거의 몰랐었는데, 다시 한 번 부정행위를 저지르게 되니 이번엔 좀 더 또렸하게 되새겨진다.

대학교 다닐 때 처음 들었던 자바 수업의 학점이 D+인가.. C+인가 그렇다. 난 못하지 않았다. 아니 오히려 잘했다에 매우 가까웠다. 난 이과가 아니다. 문과였고, 내가 졸업한 학부 역시 경상대 소속이었다. 따라서 내 주변 학우들은 프로그래밍언어를 배우는게 굉장히 난색을 표했었고, 난 이상하게 이과 성향이 강한 문과생이었기 때문에 잘 적응할 수 있었다. 경영통계수학, 경영학원론, 경제학개론, 정보관리시스템 등의 수업 보다는 훨씬 재밌었고 마치 오아시스 같은 전공 수업이었다.

당연히 난 열심히 했다. 또 이 수업의 장점은 한창 술 마시고 놀 시기에, 날 놀 수 있게 해줬다. 교수님은 학부 수업 시간 마다 10분짜리 쪽지 시험을 봤었는데, 그 시험만 보면 나가 놀아도 된다고 했었다. 그래서 정말 난 그 시험만 보고 맨날 나가 놀고 공부는 술마시고 나서 했었다. 공부한걸로 시험보고 또 나가서 술마시고 놀았다. 얼마나 좋은 수업인가!!

중간고사와 기말고사는 엄청나게 빡쌨다. 도무지 3시간 동안 풀수 없는 분량의 문제를 내놓고 풀라고 시켰다. 대부분의 학우들은 1, 2시간동안 풀다가 포기하고 나가기 일쑤다. 3시간이 마치 타임머신이라도 된 듯 순식간에 지나가고 미뤄뒀던 문제에 매달리며 신경을 곤두세우다가 시험이 끝나곤 했다.

대충 70~80점을 받았다. 하지만 이 성적이 해당 클래스에서는 탑5안에 드는 성정이었다. 다시 말하지만 자랑질이 아니다. 문과생들과 겨룬것이기 때문에 전혀 자랑할께 아니다. 고등학교때까지만 해도 물론 나도 문과생이긴 하지만 국어책 보다는 수학책을 더 좋아했었다. 근데 수2는 도무지 @_@.. 암튼.

그래서 난 당연히 A+를 받아야 했지만, 나는 부정행위을 저지르고 말았다. 그래, 이 이야기가 시작된 이유도 바로 ‘부정행위’ 떄문이다.

친구 숙제를 도와줬었다. 그런데 그 교수님은 정말 눈썰미가 뛰어났던데다가 cheating에 매우 예민한 교수님이었다. 나의 코딩 수준과 은폐 실력은 많이 모잘랐다. 당연히 걸렸다.

두 명을 도와줬다. 세명이 불려갔다. 나는 A+을 포기하고 D+인지 C+을 받았다. 변명하고 싶지도 않았고 변명한다고 달라질것 같지도 않았다. 인정하고 받아들였다. 나머지 두 친구는 F를 받아야 할 처지에 놓였다. 한 명은 그 상황에서도 타협을 해, D+를 받아냈다. 다른 한 명은 울음을 터트렸지만 달라진건 없었다. 그런데 나중에 들어보니 D+를 받았댄다. 뭔 상관인가~ ㅋㅋ

후아.. 그런데 웃긴건, 1학년 때 처음 들었던 컴퓨터 입문인지 머시기 교양 수업에서도 비슷하게 친구들 숙제를 도와줬었다가 부정행위로 걸린적이 있는데, 그때 그 수업도 그 교수님의 수업이었다.

암튼 그 뒤로 그 교수님과 재미나게 얽혀서 잘 지내다가 뒤끝이 매우 안좋게 끝나버렸다. 암튼 그건 다른 이야기고, 오랜만에 부정행위를 저지르고나니.. 나의 고질병이 아닌가 싶기도하다.

내 주변인은 나의 이런 특성을 이용하지 말았으면 좋겠다. 내가 나서서 도와주겠다고 하더라도.. 이렇게 말을 했으면 좋겠다.

“지금 나 무시하냐. 죽이되든 밥이되든 내가 알아서 할 수 있다!”

이렇게… 간지나게 말이다. 그럼 미안해서 내가 밥이라도 살텐데 말이다.

ps: 목숨이 걸린일도 아니고 그깟 학점따위 가지고 양심을 좀먹는 행위를 했다는게 부끄럽다. 지금도 부끄럽다. 미안하다 기선아. 앞으론… 흠…