728x90

출처 : https://honeyinfo7.tistory.com/m/247

Redis 설치 (6.0.4 버전)

설치 OS : CentOS7 레디스.. 회사에서 쓰는데,, 카프카와 동시에 잘 모르겠는 플랫폼.. 심지어 개발중인 시스템이 아닌 운영중인 시스템이기에 함부로 건드리지도 못하겠다. 이 부분에 대해서는 손

honeyinfo7.tistory.com


■ 설치
$ tar -xvf redis-6.2.0.tar
$ cd redis-6.2.0
$ make
※ makefile 있는지 확인할것

■ 기동
$ /redis-6.2.0/src/redis-server /redis-6.2.0/redis.conf &
■ 중지
$ /redis-6.2.0/src/redis-cil shutdown

728x90

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

[Linux] free 명령어  (0) 2021.03.22
[Linux] make와 makefile 개념  (0) 2021.03.16
[Linux]alternatives  (0) 2021.02.08
[명령어]fuser  (0) 2021.02.08
[UNIX]TCP Dump  (0) 2020.12.08
728x90

webtob의 동작을 분석하기 위해 trace를 해야 할때가 있다.

다음의 2가지 방법으로 가능하다.

1. 로그레벨을 trace로 변경
$ wsadmin
> ll .hth -l trace

2. 로그 설정을 변경
$ wsadmin
> ll .hth -o dcR,dcW,dsR,dsW

dcR - client가 보낸 데이터 출력
dcW - client로 전송된 데이터 출력
dsR - server가 보낸 데이터 출력
dsW - server로 전송된 데이터 출력

위와 같이 입력하면 아래의 파일로 trace가 생성
${WEBTOBDIR}\log\HTH-[PID]-[YYMMDD].trace

1번으로 살펴보고 분석에 대한 정보가 부족할시 2번으로 분석

webtob재기동시 설정된 trace는 모두 해제

원복
ll .hth -o -dcR,dcW
ll .hth -o -dsR,dsW
ll .hth -l INFO


728x90
728x90

■ 현상
JEUS6 ADMIN(ja) 호출 시 응답을 Null로 받음

■ 원인
패스워드의 암호화 키값에 대한 encoding/decoding을 하지 못하여 발생.

■ 조치사항
아래의 2개 파일에 대한 퍼미션 부여 필요
${JEUS_HOME}/bin/encryption (실행권한)
${JEUS_HOME}/config/`hostname`/security/security.key (읽기권한)

728x90
728x90

alternatives
개요
심볼릭링크를 생성,제거,관리,조회할 수 있는 기능을 제공하는 GNU 라이센스 툴
주로 리눅스환경에서 default 경로 잡을때 사용

사용법
alternatives --install <링크> <이름> <경로> <우선순위> [--initscript <서비스>] [--slave <링크> <이름> <경로>]* alternatives --remove <이름> <경로>
alternatives --auto <이름>
alternatives --config <이름>
alternatives --display <이름>
alternatives --set <이름> <경로>
alternatives --list

EX) 사용가능한 java목록에 신규 java등록
$ alternatives --install /usr/bin/java java /usr/lib/jvm/jdk8/bin/java 100
$ alternatives --config java
리스트에서 선택

728x90

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

[Linux] make와 makefile 개념  (0) 2021.03.16
[Linux]redis 설치  (0) 2021.03.16
[명령어]fuser  (0) 2021.02.08
[UNIX]TCP Dump  (0) 2020.12.08
[UNIX/LINUX]Thread Dump 확인 시 Thread별 CPU 사용률 확인  (0) 2020.12.07
728x90

fuser
 개요
 특정 파일이나 파일시스템, 포트등에서 사용 중인 프로세스 확인 시 사용

 Options
 -a : 사용되지 있지않은 파일까지도 표시
-k : 지정된 파일과 관련된 모든 프로세스들을 KILL
-n space : 지정된 공간(file, udp, tcp)내에서 검색
-u : 프로세스 ID(PID)의 소유자를 보여준다.
-v : 자세한 출력모드 (프로세스의 User, PID, ACCESS, COMMAND를 보여줌)

 ex) 21번 포트 사용하는 PID찾기
 

$ fuser 21/tcp


     tcp 프로토콜 사용 중인 프로세스 확인

$ fuser -vn tcp


     tcp 프로토콜에서 443포트 사용 중인 프로세스 확인

$ fuser -vn tcp 443


     /var라는 디렉토리를 사용하고 있낸 유저나 데몬의 PID 찾기

$ fuser -cu /var


     /var라는 디렉토리를 사용하고 있낸 유저나 데몬의 PID 찾아서 kill

$ fuser -ck /var


728x90

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

[Linux]redis 설치  (0) 2021.03.16
[Linux]alternatives  (0) 2021.02.08
[UNIX]TCP Dump  (0) 2020.12.08
[UNIX/LINUX]Thread Dump 확인 시 Thread별 CPU 사용률 확인  (0) 2020.12.07
[Linux]Linux 기초 점검 1분 컷  (0) 2020.12.02
728x90

OutOfMemory란?
Garbage Collector가 새로운 Object를 유지 하기 위해 충분한 메모리 공간을 확보하지 못할 때 발생.
Vendor사의 JVM 메모리 모델이 다르기 때문에 사용하는 JVM 메모리 모델을 인지하고 있어야 한다.
  ex) HPUX는 Heap에 Perm이 포함되어 있음.
   IBM 은 Heap과 Perm이 별도 산정.

OOM 유형별 현상 및 조치방법
 1. Heap Memory가 Full인 경우
  1.1 응용프로그램에서의 과도한 사용
   발생하는 시점의 Heap dump, Thread dump가 필요
   여기서 중요한 점은 OOM으로 인해 프로세스가 죽기 전인 해당 현상이 발생하고 있는 시점에서 떠야한다.
   특히 Thread dump는 생성할 당시의 스레드 상태만 알 수 있기 때문에 3초간격으로 3회를 추천.
   그래야 오래 수행되는 특정 스레드를 찾을 수 있기 때문 (3개의 Thread Dump에서 동일하게 수행되고 있는 스레드가 문제일 확률이 높음)
   생성한 Heap dump는 MemoryAnalyzer를 통해 분석
   MemoryAnalyzer에서 StackTrace까지 확인 가능하기에 제대로 된 Heap dump만 있어도 Thread dump는 필요 없다.

  1.2 leak에 의해 점차적으로 쌓이는 경우
   gc log 및 jtstat을 통해 해당 현상의 추이를 확인 할 수 있다.
   추이를 확인하여 메모리 사용률이 높은 지점을 포착하여 Heap dump 생성 후 MemoryAnalyzer를 통해 분석

 2. Perm이 Full인 경우
  Perm 영역은 Class loader에 의해 load되는 Class, Method 등에 대한 Meta 정보가 저장되는 영역이다.
  Code가 올라가는 부분이기 때문에 Code가 모두 Load되고 나면 거의 일정한 수치를 유지한다.
  특히 어플리케이션 디플로이/리디플로이시에 많이 겪을 수 있다.
  따라서 모니터링을 통해 적정한 수치까지 Perm size를 증가 시켜주어야 한다.

 3. C Heap(Native)이 문제인 경우
  3.1 Maxdsiz 
   Maxdsiz란 proccess의 data 세그먼트의 최대 사이즈를 의미하는 HPUX의 커널파라매터 이다.(default 값은 64MB)
   Heap에는 java heap과 c heap으로 나뉘는데 C heap은 jdk내부적으로 C라이브러리를 사용하거나 jni를 통해서 c프로그램을 호출할 시 Data 영역을 사용하게 된다.
   Maxdsiz 문제로 OOM을 마주하게 되었을 때의 조치사항
    1) Maxdsiz 는 최대값인 4G(0xfffff000)로 설정하고, 실행유저의 ulimit의 Data값을 따로 설정하지 말것.
      Maxdsiz는 limit을 지정하는 값이기 때문에, 최대값(4G)으로 설정하여도 아무런 부작용이 없다.
    2) java_q4p를 사용하는 것.(Heap size를 2G 이상 설정하면 자동으로 java_q4p로 실행)
※${JAVA_HOME}/bin/IA64N/java_q4p 로 실행하면 강제적으로 가능
       Maxdsiz로 최대값(4G)을 줘도,  Xmx 500M 로 사용중이라면, java_q2p 까지만 data영역으로 쓸수 있기 때문에, 2G까지 제한 됨.
    3) Glance를 통해 Data 영역 모니터링 방법
      glance 실행 → Shift + m 입력 → jvm PID 입력

  3.2 JAVA C heap small block arena corruption 
   C heap에서 메모리 주소를 침범하여 발생하는 메모리 corruption이 발생할 때(HPUX), _M_SBA_OPTS 옵션을 사용하여 해결 할 수 있다.

    메모리 corruption의 대표 예
    char *p = malloc (10); 
    char *name = (char *) malloc(11);      
    memcpy ( p,name,11); // Problem begins here 

   p는 10 bytes, name은 11 bytes  인데 p에 11bytes를 쓰면, 뒤에 1byte 에 memory corruption이 발생. 이걸 실행시에는 crash가 발생하지 않음. Compile도 문제없이 됨.
   그 1byte는 free list ptr값의 일부였는데 훼손이 된 상태로 있다가 해당 free list ptr값을 가지고 malloc을 하려고 했을때 뭔가 문제가 있다는 걸 감지하여 crash를 내며 죽음.
   Corruption이 언제 일어났는지 알수 없고, app에서 corruption code를 찾기 어렵다면, 편법으로 memory allocation마다 padding을 붙여서 corruption이 일어나는 것에 쿠션장치를 둘수 있으나,
   얼마의 padding이 적절한지는 crash가 안날 때까지 계속 고쳐나가면서 _M_SBA_OPTS 의 적정값을 찾아야 하고 padding만큼 app의 메모리 사용량은 증가하는 side effect가 있으며, 성능도 느려질 수 있다고 한다.

   환경 변수 _M_SBA_OPTS 설정은 두가지 목적으로 적용 및 사용하게 된다.
    1) small block allocator 를 사용하는 주 목적은 성능 개선
     molloc() 요청시 한번에 할당하는 개수를 지정할 수 있어, 할당 시 지정 값 만큼 한번에 할당되어 다음번 molloc() 요청시 미리 할당된 미사용 block을 사용하기 때문에 성능이 개선됨.
    2) C heap에서 corruption이 있을 때
     block 할당 단위를 요구량에 맞추는 것이 아니라 요구량 이상으로 (여기서는 100바이트 단위로) 할당을 하면, 오류로 인해 주소 범위가 조금 벗어나도 할당 범위 안에 있다면 문제를 일으키지 않음.

   환경변수 _M_SBA_OPTS=A:B:C 각 값의 의미 
    Default 값 _M_SBA_OPTS=512:100:16시 맨 앞 512 값보다 작은 값에 적용이란 뜻으로 맨 앞의 값보다 적은 값까지 SBA(small block allocator) 할당이 적용.
        가운데 100값은 한번에 할당 하는 개수를 의미
     마지막 16값은 malloc시 할당 되는 값의 단위
    그래서 Default 값 _M_SBA_OPTS=512:100:16시 malloc(10)을 요청하게 되면 16byte 100개 가 할당되며, 또 다시 malloc(10) 요청이 오면 기존에 16byte 100개 할당되었던 block중 미사용 block을 사용하게 되며, 만일 미사용 block이 없으면 다시 16bite 100개가 할당됨.
    Malloc()이 Malloc(16)byte가 넘게 되면 각 malloc값이 맞춰어 16,32,48,64,80….512까지 맞춰서 100개씩 할당되며 같은 값의 malloc시 할당되었던 block중 미사용 block을 사용하게 되며 만일 미사용 block이 없으면 다시 같은 크기의 byte로 100개 가 할당됨.

   결론적으로 _M_SBA_OPTS 옵션을 사용하여 메모리 corruption이 발생하지 않도록 padding값을 주되, 적정한 값은 설정 후 모니터링을 통해 찾아야 함.

728x90
728x90

java7 이상 4g 이상의 jvm은 G1 알고리즘이 적합

■ java의Default 옵션 알아내기
java -XX:+PrintCommandLineFlags -version

-Xms1024m -Xmx1024m
최초 Heap Size / 최대 Heap Size
-XX:PermSize=256m -XX:MaxPermSize=256m
최초 Prem영역 Size / 최대 Prem 영역 Size
-XX:-UseAdaptiveSizePolicy
JVM에서 Heap Size 조절
-verbosegc -XX:+PrintGCDetails -XX:+PrintGCTimesStamps
GC로그 상세출력
-XX:InitialTenuringThreshold=32 -XX:MaxTenuringThreshold=32
객체의 Mionr GC 수행 횟수 / 객체의 최대 Mionr GC 수행 횟수
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
New 영역 병렬GC 수행 / Old 영역 병렬 GC 수행 / 클래스Data도 GC 수행 
-XX:+DisableExplicitGC
사용자 임의의 GC 수행 비활성화
-XX:SurvivorRatio=8
New영역의 Eden size 비율
Eden 8 : Survivor 1 : Survivor 1
-XX:NewSize=32m -XX:MaxNewSize=512m
최소 최대 New사이즈
-XX:NewRatio=3
Heap영역에서 Old와 New size 비율
Old 3 : New 1
※절대값 설정과 상대값 설정을 혼용한다면 절대값이 우선순위가 높음
-XX:ParallelGCThreads=8
다중 gc를 위해 사용될 gc thread 개수
※활용가능한 프로세서의 수를 기반으로 할 것.
같은 머신에서 여러개의 jvm을 가동할때도 개수 고려할 것
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC
new영역의 gc를 병렬적 사용 및 CMS gc 사용
-XX:+CMSClassUnloadingEnabled
클래스의 데이터도 gc의 대상이 되게 지정

728x90
728x90

출처:https://helols.tistory.com/m/15

local이라 하면 일반적으로 서버를 의미하는 것이겠죠..
Local IP : <%=request.getLocalAddr()%>
Local Name : <%=request.getLocalName()%>
Local Port : <%=request.getLocalPort()%>

클라이언트의 정보입니다.
IP, Host, Port를 가져올 수 있습니다.
Remote IP : <%=request.getRemoteAddr()%>
Remote Host : <%=request.getRemoteHost()%>
Remote Port : <%=request.getRemotePort()%>

서버 이름과 포트가 있는데요.. 일반적으로 local 기본정보와 동일하겠죠..
Server Name : <%=request.getServerName()%>
Server Port : <%=request.getServerPort()%>

지역 정보입니다. 대부분 한국을 의미하는 ko가 나올 것 같네요..
Locale : <%=request.getLocale()%>

사용하는 프로토콜입니다. "프로토콜/메이저버전.마이너버전" 의 형태입니다.
Protocol : <%=request.getProtocol()%>

http, https, ftp와 같은 것을 의미합니다.
Scheme : <%=request.getScheme()%>

https와 같은 보안 채널의 사용 여부입니다. true/false 값으로 되어 있네요..
Secure Channel : <%=request.isSecure()%>

요청에 대한 URI, URL, 컨텍스트 경로, 서블릿 경로, GET/POST등의 메소드를 나타냅니다.
Request's URI : <%=request.getRequestURI()%>
Request's URL : <%=request.getRequestURL()%>
Context Path : <%=request.getContextPath()%>
Servlet Path : <%=request.getServletPath()%>
Method : <%=request.getMethod()%>

세션 ID에 대한 정보들입니다.
Session ID : <%=request.getRequestedSessionId()%>
Session ID from Cookie : <%=request.isRequestedSessionIdFromCookie()%>
Session ID from URL : <%=request.isRequestedSessionIdFromURL()%>
Session ID is still valid : <%=request.isRequestedSessionIdValid()%>

Header 정보를 보는 방법입니다.
<%
 Enumeration eHeader = request.getHeaderNames();
 while (eHeader.hasMoreElements()) {
  String hName = (String)eHeader.nextElement();
  String hValue = request.getHeader(hName);

  out.println(hName + " : " + hValue);
 }
%>

Request 객체를 통해서 쿠키 정보를 보는 방식이구요~
<%
 Cookie cookies[] = request.getCookies();
 for (int i=0; i < cookies.length; i++) {
  String name = cookies[i].getName();
  String value = cookies[i].getValue();

  out.println(name + " : " + value);
 }
%>

HTML 폼을 통해 넘어온 데이터를 받는 부분입니다.
<%
 Enumeration eParam = request.getParameterNames();
 while (eParam.hasMoreElements()) {
  String pName = (String)eParam.nextElement();
  String pValue = request.getParameter(pName);

  out.println(pName + " : " + pValue);
 }
%>

미리 설정한 attribute를 가져오는 부분이구요..
<%
 Enumeration eAttr = request.getAttributeNames();
 while (eAttr.hasMoreElements()) {
  String aName = (String)eAttr.nextElement();
  String aValue = request.getHeader(aName);

  out.println(aName + " : " + aValue);
 }
%>

728x90

'IT > MiddleWare(WEB WAS)' 카테고리의 다른 글

OutOfMemory 에 대한 고찰  (0) 2021.01.13
[JAVA]JVM GC관련 기본 옵션  (0) 2021.01.11
[JEUS]JEUS 7,8 WEBADMIN IP 접속 제한  (0) 2020.12.29
[WEBTOB/JEUS]cookie SameSite 이슈 (chrome 80)  (0) 2020.12.22
[JAVA]java agent??  (0) 2020.12.22
728x90

Server > adminServer 선택
Engine > Web Connections > ADMIN-HTTP 선택
고급선택사항 > Server Access Control 체크
> Allowed Server 에 허용할 IP기입

728x90

'IT > MiddleWare(WEB WAS)' 카테고리의 다른 글

[JAVA]JVM GC관련 기본 옵션  (0) 2021.01.11
[SEVLET] REQUEST 정보 파악  (0) 2020.12.29
[WEBTOB/JEUS]cookie SameSite 이슈 (chrome 80)  (0) 2020.12.22
[JAVA]java agent??  (0) 2020.12.22
[JAVA] BCI (Byte Code Instrumentation) ??  (0) 2020.12.22
728x90

출처: https://ifuwanna.tistory.com/223

크롬(Google Chrome)80버전부터 새로운 쿠키 정책이 적용 되어 Cookie의  SameSite 속성의 기본값이 "None"에서 "Lax"로 변경

■ 그로 인한 어떠한 영향도가 있는가??
SameSite 를 None 으로 설정할 경우 모든 도메인에서 쿠키를 전송하고 사용할 수 있지만  사용자가 사이트 간 요청 위조(CSRF - Cross-site request forgery) 및 의도하지 않은 정보 유출에 취약해질 가능성이 있음.
이러한 취약점을 방지하기 위해 지금까지는 별도의 SameSite 속성 명시 없이 쿠키를 생성했을 때 "SameSite=None" 으로 설정한 것과 동일하게 동작 했지만 Chrome80 버전 이후에는 SameSite 속성 설정이 없는 쿠키는 "SameSite=Lax" 로 명시한 것과 동일하게 동작
즉 iframe, ajax를 이용하여 다른 도메인으로부터 받은 쿠키를 저장하지 않게 됨

■ SameSite 란?
Cookie의 SameSite 속성은 서로 다른 도메인간의 쿠키 전송에 대한 보안을 설정.

"None"은 동일 사이트과 크로스 사이트에 모두 쿠키 전송이 가능. 그리고 "Strict"로 설정할 경우 서로 다른 도메인에서는 아예 전송이 불가능해 지기 때문에 CSRF를 100% 방지할 수 있으나 사용자 편의성을 많이 해치게 됩니다. 그래서 Strict 설정에 일부  예외( HTTP get method / a href / link href )를 두어 적용되는 설정이 이번에 기본값으로 변경되는 "Lax

■ 크롬이 SameSite 정책을 변경한 이유
브라우저에서 기본 설정을 변경한 것은 크로스 도메인간 중요한 정보 유지는 CSRF 가능성이 있는 쿠키가 아닌 다른 안전한 방식으로 하기를 권장하기 때문.
제안하는 대로 Lax 설정에서도 문제 없게끔 쿠키에 대한 의존성을 낮추는 것이 권장 되지만 바로 수정개발이 힘든 경우는 쿠키의 SameSite설정을 기존의 기본값이었던 None으로 설정하여 임시로 해결 할 수 있음.

■ 해결방안
1. WEBTOB patch
WebtoB-4.1.9.1-B308.50.18 로 패치

2. JEUS patch
버전별 패치파일 상이
JEUS6 : jext_v6008_i215676_a1340679.jar
JEUS7: jext_v7004_i214319_a1333430.jar
JEUS8: jext_v8000_i215340_a1339733.jar

3. JEUS설정 변경
버전별 설정파일 상이
JEUS6
- JEUSMain.xml 의 다음과 같은 내용 추가
<node><engine-container><command-option>-Djeus.servlet.response.cookie.sameSite=None
- WEBMain.xml 의 다음과 같은 내용 추가
<web-container><session-config><seasion-cookie><secure>true

JEUS7,8
Servers 메뉴 - MS선택 - Basic탭 - Basic Info 탭 이동
[Lock&Edit] 버튼 클릭 - Jvm Option 수정(-Djeus.servlet.response.cookie.sameSite=None) - 우측 상단 파란색 확인 버튼 클릭 - [Activate Changes] 버튼 클릭

Servers 메뉴 - MS선택 - Engine탭 - Web Engine 탭 - Session Config 탭 이동
[Lock&Edit] 버튼 클릭 - Secure 옵션 체크 - 우측 상단 파란색 확인 버튼 클릭 - [Activate Changes] 버튼 클릭


728x90

'IT > MiddleWare(WEB WAS)' 카테고리의 다른 글

[SEVLET] REQUEST 정보 파악  (0) 2020.12.29
[JEUS]JEUS 7,8 WEBADMIN IP 접속 제한  (0) 2020.12.29
[JAVA]java agent??  (0) 2020.12.22
[JAVA] BCI (Byte Code Instrumentation) ??  (0) 2020.12.22
[WEBTOB]Compression 설정  (0) 2020.12.17

+ Recent posts