728x90

Unix / Linux 에서 표준 입력, 표준 출력, 표준 에러에 대한 파일 디스크립터는 다음과 같은 정수로 할당되어 있다.


표준 입력 = 0

표준 출력 = 1

표준 에러 = 2


따라서 표준 출력과 표준 에러를 한 파일로 리다이렉션 하려면 다음과 같이 하여야 한다.


# 명령어 > 표준 출력 리다이렉션  2>&1

 EX) cat test.txt > result.log 2>&1


최초 > 를 통해 리다이렉션 방향은 정해졌으며 표준 출력은 result.log에 저장된다.

그 뒤의 파일 디스크립터 2(표준 에러)는 1(표준 출력)으로 리다이렉션 되기 때문에,

쉽게 말하면 "2"를 "&1"로 보내라는 뜻 

result.log에 표준 에러와 표준 출력이 한 파일에 저장되게 된다.

728x90
728x90

물리디스크는 제조사의 타입별 파티션 표기법이 다름

■ 리눅스 구성시 기본 파티션 정보

 

728x90
728x90

일반적으로 ps 명령을 통해 기동시간 확인을 한다.
하지만 해당명령으로 확인되지 않을때가 있다.
그 때 쓸만한 정보를 찾아보자.

1. proc 디렉토리
$ ls -al /proc | grep [pid]
디렉토리 생성 시간이 기동 시간

728x90
728x90
NTP에 대한 고찰
ntp는 straum 이라는 계층 구조를 가짐
straum 0  -> GPS나 원자시계등의 직접 시간을 구하는 장비
straum 1  -> straum 0에서 구한 시간을 동기화 해주는 서버들

보통 straum 2 에서 동기화를 하고 동기화를 받은 straum 3 서버에 나머지 같이 운영하는 서버들을 peer로 함.
이 트리구조는 ntp사용의 부하를 줄이기 위함. 만약 straum 1로 모두 붙어서 사용하게 된다면 서비스가 유지가 힘듬.
통상적으로 ntp는 UDP 123포트 사용.

[etc]  /usr/sbin/ntpq -p
     remote           refid      st t when poll reach   delay   offset    disp
==============================================================================
+sws1         10.10.10.*      2 u  713 1024  377     1.60   -0.739    0.18
*sws2         10.11.10.*      2 u  573 1024  377     0.64    0.085    0.08

항목 설명
*  현재 sync 받고 있음
+  접속은 가능하지만 sync를 하고 있지 않음
-  접속은 가능하지만 sync 가능리스트에서 제외
공백 접속불가

remote - sync를 하는 straum 서버의 주소
refid - straum 2 서버가 현재 sync를 하고 있는 straum 1 서버
st - remote의 straum 넘버
t - 시간을 받아보는 방식 (uniquest, multicast, broadcast)
when - ntp 서버로 부터 데이터를 수신한 후 경과 시간 (초)
poll - ntp 서버에 sync 요청 주기
reach - 최근 8번 poll 요청에 대한 응답 여부
delay - network 지연시간 (ms)
offset - ntp 서버와 자신의 시간차이 (ms)

/etc/ntp.conf 에 대한 설정
# restrict 설정은 peer 들이 본 서버로 sync 하는 것에 대한 제한
restrict 127.0.0.1
restrict -6 ::1

# NTP 서버 설정
server shcws01
server shcws02  prefer

# driftfile 은 시간 오차치를 보존해 두는 파일 ntpd 데몬에 의해 자동 생성
driftfile /var/lib/ntp/drift

# 인증 받기 위한 key가 저장되는 파일
keys /etc/ntp/keys
728x90
728x90

개요
 HPUX JAVA Minor패치(1.6.0.20 -> 1.6.0.33) 후 특정 로직에서 Exception 발생.

현상
 HPUX JAVA Minor패치(1.6.0.20 -> 1.6.0.33) 후 특정 로직에서 java.lng.NoClassDefFoundEeeor : Could not initialize class com.sun.net.ssl.internal.ssl.SupportedEllipticCurvesExtension 발생

원인
 HPUX JAVA 1.6.0.33으로 업그레이드시 발생하는 exception는com/sun/net/ssl/internal/ssl/SupportedEllipticCurvesExtension에 대한 class를 찾지 못해서 생긴 메시지.
 해당 exception은 JDK-8148516 fix에서 시작합니다. 이 fix의 부작용으로 elliptic curve name extension field 처리에 필요한 elliptic curve cryptography support 를 잃어버렸음.
 잃어버린 elliptic curve cryptography support에 대한 내용 문서 http://bugs.java.com/view_bug.do?bug_id=8175005

해결방안
 https://bugs.openjdk.java.net/browse/JDK-8173783 에 의하면 해당 버그는 6u141 b32(HPE JDK 6.0.35)에서 해결

 

728x90
728x90

tcp_conn_request_max
 개요
 application에서 tcp connection을 한번에 열어줄 수 있는 개수를 관장하는 OS global parameter.
 default : 4096 connections

 관련 현상
 Socket error : No buffer space available.

 ex) /usr/bin/ndd -[set/get]  /dev/tcp tcp_conn_request_max

     tcp_conn_request_max 값을 확인하라 

 $ /usr/bin/ndd -get  /dev/tcp tcp_conn_request_max


     tcp_conn_request_max 값을 8k로 설정하라

$ /usr/bin/ndd -set  /dev/tcp tcp_conn_request_max:8192


728x90
728x90

개요
 JAVA Process HANG 발생 후 해당 Process의 kill 불가.

현상
 JAVA Process의 서비스 불가로 인한 HANG 발생 확인 후 process에 대해 kill등의 조치를 취하려 하였으나 불가하였음.

원인
 HP OS의 NFS(네트워크 공유 파일 시스템)솔루션인 ONCplus Software의 Bug 및 Virtual Memory System Call 결함으로 인해 발생 
 (NFS Call 완료 되지 않은 상태에서  Java 프로세스의 반복적인 I/O 요청으로 Hang 발생 및 프로세스 Kill 불가)

해결방안
 1차적으로 해당 현상 해소를 위해서는 서버 리부팅을 통해 해소
 근본적인 해결을 위해 HPUX의 패치 수행
  NFS Software(ONCplus) 최신 버전(11.31.19.1) 업데이트
  vm cumulative patch 적용

728x90
728x90

개요
 OCSP의 인증기관인 Signkorea의 장애 발생 후 OCSP의 오류 발생으로 인한 거래 처리 불가 상태

현상
 OCSP의 인증기관인 Signkorea의 장애 발생 (10분간)
 기관측 조치가 완료되었으나 OCSP의 오류 발생으로 인한 거래 처리 불가 상태

원인
 기관의 장애로 인해 때문에 queue에 서비스들이 기다리게 됨
 다음과 같은 OCSP데몬의 로그로 확인 가능
  "cannot resize thread pool. Resize of thread pool exceeds max pool size."
 기관측 조치가 완료되었으나 OCSP의 오류 발생
  데몬 구조상 먼저 들어온 서비스(timeout 된 유효하지 않은 서비스)를 처리해야 하려고 시도하였기 때문에 일정 시간 동안 유효한 서비스들에 대한 처리를 할 수 없었던 것으로 추정

해결방안
 데몬 재기동 후 정상 처리
  Queue에 쌓여 있는 유효 하지 않은 서비스들과 유효한 서비스 모두 버리고 새로 시작 하기 때문에 정상 동작

 Queue에 쌓이는 서비스의 시작 시간을 활용 하여 timeout 설정
  1. 서비스의 유효 시간을 설정(3초, 5초, 10초 등)
  2. Queue에 서비스를 쌓을 때 시작 시간 추가
  3. 서비스 처리전 시간을 체크하여 시작 시간과 비교
  4. 유효 시간에 맞을 경우 서비스 진행, 유효시간에 맞지 않을 경우 서비스 종료

 

728x90
728x90
개요
 WAS 서버의 Looping현상으로 인한 서비스 지연 발생

현상
 WAS 서버의 resolv.conf 설정 변경 후 해당 WAS서버에서 제공하는 일부 서비스 접속 불가 현상

원인
 resolv.conf 설정 시 nsswitch.conf  설정 파일이 없으면 DNS 우선 참조(hosts 파일 참조 하지 않음)
 ※ resolv.conf : DNS 서비스를 위한 설정 파일
   nsswitch.conf : 도메인 검색 순서를 설정하는 파일
   ex) hosts: files [NOTFOUND=continue] dns 
     →hosts 파일에 URL이 없으면 dns 서버에서 검색

 hosts 파일 내에 등록된 URL 호출 불가로 서비스 큐잉 발생
  →DNS 참조 후 공인IP로 호출하게 되어 내부IP 호출 서비스 불가
  →WAS서버는 DMZ 망이 아닌 내부망에 존재 하므로 공인IP로 서비스 호출 불가

해결방안
 resolv.conf 의 설정에 대한 무지로 인해 발생한 건으로 resolv.conf 원복하여 해결

 
728x90
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

+ Recent posts