728x90

java 관련 명령어

HP-UX java 버전 분별법
IA64N - 32bit
IA64W - 64bit 

jinfo
 개요
 JVM option(java command option)을 확인

  java command option
    -X는 표준이 아닌 설정으로 Macro한 측면에서 JVM제어 기능을 제공 (모든 JVM에서 지원한다는 보장이 없음)
   -XX는 표준이 아닌 설정으로 안정적이지 않은 옵션. (-X Option보다 세밀한 제어 기능을 제공하며, 성능 튜닝/버그 Workaround를 위해서 주로 사용됨)
    -XX:+<옵션>은 해당 옵션을 활성화 -XX:-<옵션>은 해당 옵션을 비활성화
    -XX:<옵션>=<숫자> 시 'm','M'은 메가바이트 'k','K'는 킬로바이트 'g','G'는 기가바이트를 표현

 UNIX/Linux/Windows JAVA 5 이상 제공.
 Heap, PermSize 등 옵션지정 없는 프로세스에 대해 default값 확인 가능.
 HP-UX에서는 -flag 필수, Linux에서는 -flag없이 pid만 포함하면 해당 프로세스 JVM 전체 정보 출력.

 ex) jinfo -flag [JVMflag] [pid]
     5555라는 pid의 PermSize를 출력하라
   

$ jinfo -flag PermSize 5555
-XX:PermSize=134217728


jstat
 개요
 JVM 측정을 위한 성능 통계를 표시한다.

 항목 설명
  Timestamp : JVM의 시작 시간 이후의 시간
  S0 : Survivor0의 사용률
  S1 : Survivor0의 사용률
  E : Eden 영역의 사용률
  O : Old 영역의 사용률
  P : Permanent 영역의 사용률
  YGC : Young generation의 GC 이벤트 수
  YGCT : Young generation의 가비지 컬렉션 시간
  FGC : Full GC 이벤트 수
  FGCT : Full의 가비지 컬렉션 시간
  GCT : 가비지 콜렉션 시간

  Options
 -class : 클래스로드의 동작에 대한 통계
 -compiler : 핫스팟 컴파일러의 동작의 통계를 표시
  -gc : 가비지 콜렉트된 힙 영역에 대한 통계
 -gccapacity : Generation과 해당 공간의 용량 통계
 -gcutil : 가비지 콜렉션 통계 요약

  OutputOptions
 -h [n] : 칼럼 머리글마다 n개의 출력 행 표시 
 -t : 출력되는 첫번째 칼럼에 타임스탬프 표시 (타임스탬프는 JVM의 시작 시간 이후의 시간이다.)

 ex) jstat -options -outputoptions [pid] [interval] [count]
     22820의 pid에 10초(10000ms)간격으로 100개의 샘플을 취득해 -gcutil 옵션에 따라 출력하라(단 5개 출력 마다 머리글 표시 첫 번째 칼럼엔 타임스탬프를 표시)

$ jstat -gcutil -h 5 -t 22820 10000 100
Timestamp         S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
      1239777.3  32.23   0.00  98.88   1.54  13.76    430  100.417     0    0.000  100.417
      1239787.3  32.23   0.00  99.24   1.54  13.76    430  100.417     0    0.000  100.417
      1239797.3   0.00  36.26  19.20   1.54  13.76    431  100.490     0    0.000  100.490
      1239807.4   0.00  36.26  38.71   1.54  13.76    431  100.490     0    0.000  100.490
      1239817.4  29.82   0.00  15.43   1.54  13.76    432  100.722     0    0.000  100.722
Timestamp         S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
      1239827.4  29.82   0.00  34.67   1.54  13.76    432  100.722     0    0.000  100.722
      1239837.4  29.82   0.00  35.03   1.54  13.76    432  100.722     0    0.000  100.722


 2행과 3행을 보면 Minor gc가 발생하여 Eden 영역이 감소하고 YGC와 YGCT가 증가함을 볼 수 있다.

jstack
 개요
 java Thread dump 생성해주는 명령어로 java stack 확인할 때 사용.
 ※Unix/Linux 는 Java 5 부터 Windows 는 Java 6 부터 지원
   Unix/Linux 에서는 kill -3 명령어로도 Thread dump 생성 가능

 ex) jstack -l [JVM pid]
     4740이라는 pid에 대한 Thread dump를 td_4740.txt 라는 파일로 생성하라

$ jstack -l 4740 > td_4740.txt


jmap
 개요
 java Heap dump 생성해주는 명령어로 java Heap을 확인할 때 사용.

 Options
 -histo : 클래스별 객체 수와 메모리 사용량 확인
 -dump : heap dump 생성

 ex) jmap [-Options] [JVM pid]
     4740이라는 pid에 대한 Heap dump를 hd_4740.bin 라는 파일로 생성하라

$ jmap -dump:format=b,file=hd_4740.bin 4740


     24760이라는 pid에 대한 클래스별 객체 수와 메모리 사용량을 확인하라

$ jmap -histo:live 24760 | more
 num     #instances         #bytes  class name
----------------------------------------------
   1:        327969       19974168  [C
   2:        112277       15139136  <constMethodKlass>
   3:        112277        9886040  <methodKlass>
   4:        330181        7924344  java.lang.String
   5:        176627        7783016  <symbolKlass>
   6:         10189        6167032  <constantPoolKlass>
   7:         97618        4685664  com.sun.tools.javac.zip.ZipFileIndexEntry
   8:         10189        4531304  <instanceKlassKlass>
   9:         46349        3980768  [Ljava.util.HashMap$Entry;
  10:          8970        3606368  <constantPoolCacheKlass>



 

728x90

'IT > OS (Unix Linux Windows)' 카테고리의 다른 글

[OCSP]기관 장애 발생 이후 기관 조치가 되었으나 ocsp 오류 발생  (0) 2018.11.12
[UNIX]DNS Looping  (0) 2018.11.08
[명령어]basename / dirname  (0) 2018.11.02
[명령어]ln  (0) 2018.10.30
[명령어]split  (0) 2018.10.30
728x90
개요
 WEBTOB를 기동하였으나, Port LISTEN이 되지 않음.
 WEBTOB의 IPCPerm 설정이 되지 않고, htl을 root로 설정하게 되어, 기동 시 htld의 퍼미션 거부로 인한 Port의 LISTEN이 되지 않음.

현상
 다음과 같은 로그가 발생하며 WEBTOB내 지정된 Port들이 LISTEN 하지 않음

[2018/11/04:05:47:49] HTH-12518 W HTH0072: Failed to connect to HTL. fail count=1, path=jeus/webserver/path/htld  errno=13(Permission denied)
[2018/11/04:05:47:51] HTH-12518 W HTH0072: Failed to connect to HTL. fail count=2, path=jeus/webserver/path/htld  errno=13(Permission denied)

 주의하여야 할 점은 이렇게 htld가 Permission denied를 당했음에도 불구하고, 프로세스를 검색하면 htl 프로세스가 보이며, 심지어 wsadmin에서 server 상태조회를 해보면 정상으로 보인다.!
 생각해보면.. 받아주는 포트가 막혀있는 상황일 뿐이지.. server는 멀쩡했을 것이다...
 아무튼 syslog를 자세히 들여다 보지 않는 이상 발견하기 굉장히 모호한 현상이다.

(wsadm) [2018/11/04:05:49:20]: si

------------------------------------------------------------------------------------------
 hth   svrname (svri)   status      reqs     count cqcnt    aqcnt qpcnt emcnt rscnt rbcnt
------------------------------------------------------------------------------------------
   0  html       (  0)   RDY           0         0     0        0     0     0     0     0
   0  fep        (  1)   RDY           0         0     0        0     0     0     0     0

원인
 왜 htld가 Permission denied를 당했는지 추적을 해보았다.

[jeus/webserver/path]ll
total 6
srwx------   1 jeus       tmax             0 Nov  5 10:00 hthd000
srwx------   1 root       tmax             0 Nov  5 10:00 htld
-rw-------   1 jeus       tmax          1536 Nov  5 10:00 webtob.pid
srwx------   1 jeus       tmax             0 Nov  5 10:00 wsmd

 그렇다면 htld는 왜 Permission이 저렇게 되어 있는 것인가?
 webtob 설정에서 정답을 찾을 수 있었다.
 $WEBTOB_HOME/config/http.m의 IPCPerm 이라는 설정을 보자

IPCPerm                                                                                     
● 종류: Numeric                                                                             
● 범위: 0600 ~ 0700                                                                         
● 기본값: 0700                                                                              
● WebtoB 내부 프로세스(WSM, HTL, HTH, HTMLS, CGIS 등) 및 관리 프로세스(wsadmin) 간의 내부 통신(IPC)에 사용하는 named-pipe의 접근권한을 설정한다.                                         
참고                                                                                         
UNIX/Linux 환경에서만 사용할 수 있다.                                                       

 그렇다. IPCPerm을 지정하지 않아, 기본값이 적용되었던 것이다.


해결방안
 $WEBTOB_HOME/config/http.m의 IPCPerm을 다음과 같이 설정하자.

*NODE
IPCPERM = 0777,

 ※참고사항
 WEBTOB에서 1024 이하의 Port를 사용하려면 System계정인 root의 권한이 필요하다.
 따라서 $WEBTOB_HOME/bin/htl의 권한에 setuid를 부여 해주어야 한다.
728x90
728x90

절대경로에서 파일 및 파일경로만 추출하기

 ex) basename [절대경로]
     절대경로에서 파일의 이름을 출력해라

$ basename /shome/i8/test/123
123


 ex) dirname [절대경로]
     절대경로에서 해당파일의 디렉토리 경로를 출력해라 

$ dirname /shome/i8/test/123
/shome/i8/test


728x90

'IT > OS (Unix Linux Windows)' 카테고리의 다른 글

[UNIX]DNS Looping  (0) 2018.11.08
[java 관련 명령어] jinfo / jstat / jstack / jmap  (0) 2018.11.06
[명령어]ln  (0) 2018.10.30
[명령어]split  (0) 2018.10.30
[명령어]find  (0) 2018.10.30

+ Recent posts