별거 아닌걸로 한참을 헤매기는 했어도.... 일단 중요한것 같다.

 

JAVA 운영중에 client 와 https로 통신하는데 그 과정에서 DB에서 값을 불러와서 그값에 존재하는

 

값들중 빼야되는 byte값들이 있어

 

String --> byte[] 으로 수정해서 빼야되는 byte값이 존재한다면 그값을 제외하고 다시 byte[] --> String 으로

 

수정해서 client 쪽으로 넘겨 줬다... 근데... 한글이 깨지네???

 

이상하다 싶어 이클립스에서 테스트를 해봤는데 잘되네???? 뭐지????

 

혹시나 싶어 byte[] --> String 하는 과정에서 new String(값,"UTF-8"); 을 해보고 new String(값,"EUC-KR"); 도 해봤지만.... 다 깨진다.... 헐.....

 

한참을 고민하다가 원론적으로 생각을 해봤다. 첨부터 인코딩값을 설정해서 byte형으로 쪼개고 다시 그 쪼갠값을 해당 인코딩값으로 합하면 되지 않을까?

 

그래서 String --> byte[] 할때 인코딩값을 주고 다시 붙일때 인코딩값을 주니 ... 잘된다.... 으헤헤헤헤.

 

참... 별거 아닌건데....... 요즘 생각을 안해서 그런것 같다.

 

멍청하다 정말 ㅜ.ㅜ

 

혹시나.... 이노무자슥은 왜 소스는 안올리고 방법만 올리느냐 귀찮게... 소스도 찾아야 하잔아!!! 하는 분들을

위해 간략하개나마 적어본다.

 

String info = "한글테스트";

byte[] source = info.getBytes("UTF-8");

 

요로코롬 하면 String --> byte[] 로 변하는거구

 

String remake = new String(source,"UTF-8");

 

요로코롬 하면 byte[] --> String 형으로 변하는 거임돠... ^^

 

 

출처 : 욱자의 오라클(http://ukja.tistory.com/trackback/61)

 

OOME 개요

JVM이 일정한 크기의 메모리를 할당하는데 실패하면 Out Of Memory Error, 이른바 OOME가 발생한다.

OOME의 발생 원인은 매우 다양하며, 이는 JVM이 사용하는 메모리 공간의 다양성에 기인한다. 대부분의 JVM은그 사용 용도에 따라 메모리를 몇가지 종류로 구분해서 사용한다. 가령 Sun HotSpot JVM은 다음과 같은 세 가지 종류의메모리 공간을 사용한다.((참고) 통상적으로 Permanent Space는 Java Heap의 하위 영역으로 설명된다. 하지만 본 문서에서는 Java Heap = Young Generation + Old Generation으로 간주한다)

  1. Java Heap: 사용자가 생성하는 Java Object들이 거주하는 공간이다. -Xms와 -Xmx Option에 의해 크기가 결정된다.
  2. Permanent Space: Class에 대한 메타 정보를 저장하는 공간이다. -XX:PermSize=와 -XX:MaxPermSize= Option에 의해 크기가 결정된다.
  3. Native Heap: Java Object가 아닌 Native Object들이 거주하는 공간이다. Native Heap의 크기는 JVM Option으로 지정할 수 없으며, OS 차원에서 결정된다.


각 메모리 공간의 용도와 사용 방식이 틀리기 때문에 OOME또한 매우 다양한 상황에서 발생하게 된다. OOME가 발생하는 정확한 원인을 분석하려면 각 메모리 공간의 특성을 이해하고 그에 맞는 해결책을 모색해야 한다.

(주의) 비록 Java 언어와 JVM이 자동화된 메모리 관리 기능을 제공하지만, 이것이개발자나 관리자가 메모리 관리에 대해 무신경해도 된다는 것을 의미하지 않는다는 사실을 명심하자. Java에서도 잘못된 메모리관리는 여전히 많은 문제를 일으키며, Garbage Collection에 의한 성능저하나 OOME에 의한 Applictaion정지나 System Crash등이 대표적인 예이다.

Java Heap에서의 OOME

Java Heap에서 OOME가 발생하는 경우에는 다음과 같은 에러 메시지가 출력된다.

Exception in thread "main": java.lang.OutOfMemoryError: Java heap space 또는
Exception in thread main: java.lang.OutOfMemoryError: Requested array size exceeds VM limit

전자의 메시지는 Java Heap Space의 부족으로 Object를 생성하지 못하는 경우에 발생한다. 후자의메시지는 Java Heap의 최대 크기보다 큰 Array가 요청되는 경우에 발생한다. 가령 Java Heap의 최대 크기가256M인 상황에서 300M 크기의 Array를 생성하는 경우가 이에 해당한다.

Java Heap에서 OOME가 발생하는 이유는 다음과 같다.

  • Java Heap의 크기가 작은 경우
  • Memory Leak이 발생하는 경우
    • Application Logic에 의한 Memory Leak
    • JDK Bug나 WAS Bug에 의한 Memory Leak
  • finalize 메소드에 의한 Collection 지연


Java Heap의 크기와 OOME

Java Heap의 최대 크기가 Application의 메모리 요구량에 비해 작게 설정된 경우에 OOME가 발생한다.Memory Leak이 발생하지 않는데도 OOME가 발생한다면 Java Heap의 크기가 부족하다고 판단할 수 있다.-Xmx 옵션을 이용해서 Java Heap의 최대 크기를 키워주어야 한다.

Memory Leak과 OOME

Memory Leak이발생하는 경우에는 Java Heap의 크기와 무관하게 OOME가 발생할 수 있다. 아무리 Java Heap의 크기를 크게하더라도 결국 Memory Leak에 의해 Collection되지 않는 Garbage 객체들이 메모리를 다 소진하기 때문이다.Memory Leak은 대부분 잘못된 Application 로직에 의해 발생한다. Object에 대한 참조(Reference)관계가 복잡한 경우 조그마한 실수로 인해 사용되지 않은 Object를 계속해서 참조하게 된다. 이러한 Object들은 비록Application에서는 사용되지 않지만 Garbage Collection에 의해 메모리 해제가 이루어지지 않기 때문에OOME를 유발하게 된다.

JDK Bug나 WAS Bug에 의해서도 Memory Leak이 발생할 수 있다. JDK가 제공하는 라이브러리나WAS가 제공하는 라이브러리에서 로직 오류로 인한 Memory Leak 가능성이 있기 때문이다. ApplicationLogic에서 Memory Leak이 검출되지 않는 경우에는 JDK나 WAS의 Bug를 의심해볼 필요가 있으며 각 Vendor가제공하는 Bug Database를 통해 검색 가능하다.

finalize 메소드에 의한 Collection 지연과 OOME

특정 Class에 finalize 메소드가 정의되어 있는 경우, 이 Class Type의 Object는 GarbageCollection 발생시 즉각적으로 Collection 되지 않는다. 대신 Finalization Queue에 들어간 후Finalizer에 의해 정리가 된다. Finalizer는 Object의 finalize 메소드를 실행한 후 메모리 정리 작업을수행한다. 만일 finalize 메소드를 수행하는데 오랜 시간이 걸린다면 그 만큼 객체가 오랫동안 메모리를 점유하게 된다. 이로인해 OOME가 발생할 확률이 높아진다. 이런 이유 때문에 finalize 메소드는 되도록 사용하지 말아야 한다.

Object Allocation Profiling

Java Heap의 메모리 부족 문제를 정확하게 분석하려면 Object Allocation Profiling을 수행해야한다. 즉, 어떤 Object가 어느 개수만큼 생성되었으며 얼마나 많은 메모리를 차지하는지 분석할 필요가 있다. HProf는 모든 JVM이 표준으로 제공하는 Profiler로, 간단한 Object Allocation Profiling 기능을 제공한다.

 java -Xrunhprof:heap=sites [Main Class] 

또는 다음과 같이 doe(dump on exit) Option을 비활성화해서 시간순으로 Profiling을 수행할 수도 있다.

 java -Xrunhprof:heap=sites,doe=n [Main Class]
...
Control+Break (혹은 다른 Console에서 kill -3 [pid])

Java Process에서 Signal을 보내서 Dump를 생성하는 방법은 Thread Dump를 참조한다.

아래에 HProf를 이용한 Object Allocation Profiling 결과의 간단한 Sample이 있다. 아래 Sample에서는 byte[] 유형의 객체가 20%의 Heap 공간을 사용하는 것을 알 수 있다.

        percent          live          alloc'ed  stack class
rank self accum bytes objs bytes objs trace name
1 20.36% 20.36% 190060 16 190060 16 300000 byte[]
2 14.92% 35.28% 139260 1059 139260 1059 300000 char[]
3 5.27% 40.56% 49192 15 49192 15 300055 byte[]
4 5.26% 45.82% 49112 14 49112 14 300066 byte[]
5 4.32% 50.14% 40308 1226 40308 1226 300000 java.lang.String
6 1.62% 51.75% 15092 438 15092 438 300000 java.util.HashMap$Entry
7 0.79% 52.55% 7392 14 7392 14 300065 byte[]
8 0.47% 53.01% 4360 16 4360 16 300016 char[]
9 0.47% 53.48% 4352 34 4352 34 300032 char[]
10 0.43% 53.90% 3968 32 3968 32 300028 char[]
11 0.40% 54.30% 3716 8 3716 8 300000 java.util.HashMap$Entry[]
12 0.40% 54.70% 3708 11 3708 11 300000 int[]

Permanent Space에서의 OOME

Permanent Space에서 OOME가 발생하면 다음과 같은 에러 메시지가 출력된다

Exception in thread "main": java.lang.OutOfMemoryError: Perm Gen space'

Permanent Space는 Class의 메타 정보를 저장하는 공간이다. 따라서 많은 수의 Class를 로딩하는Application의 경우 Permanent Space의 크기가 작으면 OOME가 발생할 수 있다. 다음과 같은 유형의Application들에서는 Permanent Space의 크기를 키워줄 필요가 있다.

  • 매우 많은 수의 JSP 파일을 로딩하는 Web Application. JSP 파일은 Servlet으로 변환된다.하나의 Servlet은 하나의 Java Class에 해당한다. 따라서 이 경우 매우 많은 수의 Class가 로딩된다.
  • ReflectionMechanism을 사용해 동적으로 Class를 로딩하는 Framework. Spring과 같은 현대적인 Framework들은Reflection Meachanism을 통해 동적으로 Class를 생성한다. 이 경우 개발자가 의도하지 않은 많은 수의Class들이 로딩될 수 있다.

이런 문제는 대부분의 Permanent Space의 크기를 키워주면 해결된다.-XX:PermSize=, -XX:MaxPermSize= Option을 이용해Permanent Space의 최소 크기와 최대 크기를 지정할 수 있다.

Class Loading 모니터링

Permanent Space에 Loading되는 Class의 목록을 모니터링함으로써 OOME가 발생하는 원인을 간접적으로 분석할 수 있다. 다음과 같은 방법을 통해 Class Loading을 모니터링할 수 있다.

  • -verbose:gc: Loading되는 Class들을 Standard Out을 통해 출력해준다.
  • Platform MBean: JMX 표준을 통해 제공되는 ClassLoadingMXBean API를 이용하면 프로그래밍적으로 Class Loading 정보를 얻을 수 있다.
  • JConsole: JConsole을 이용하면 Class Loading 정보를 조회할 수 있다. JConsole은 JMX 클라이언트의 표준 샘플로 Platform MBean과 통신해서 Class Loading 정보를 얻는다.

아래에 -verbose:class 옵션에 의한 Class Loading 모니터링의 간단한 Sample이 있다. Open된 jar 파일과 Loading된 Class 목록을 확인할 수 있다.

[Opened c:bea10jdk150_06jrelibrt.jar]
[Opened c:bea10jdk150_06jrelibjsse.jar]
[Opened c:bea10jdk150_06jrelibjce.jar]
[Opened c:bea10jdk150_06jrelibcharsets.jar]
[Loaded java.lang.Object from c:bea10jdk150_06jrelibrt.jar]
[Loaded java.io.Serializable from c:bea10jdk150_06jrelibrt.jar]
[Loaded java.lang.Comparable from c:bea10jdk150_06jrelibrt.jar]
[Loaded java.lang.CharSequence from c:bea10jdk150_06jrelibrt.jar]
[Loaded java.lang.String from c:bea10jdk150_06jrelibrt.jar]
[Loaded java.lang.reflect.GenericDeclaration from c:bea10jdk150_06jrelibrt.jar]
...

(참조) IBM JVM에서는 Thread Dump에서도 Class Loading 정보를 제공한다.

Class Reloading과 OOME

현대적인 대부분의 WAS가 Class Reloading 기능을 제공한다. Class Reloading이란 Runtime에Class가 재생성되면 이를 JVM을 Reboot하지 않고 Reloading하는 기능을 의미한다. 일부 WAS의 경우Class가 Reloading될 때 이전 버전의 Class를 해제하지 않는 경우가 있다. 따라서 Class Reloading이자주 발생하면 Permanent Space가 금방 꽉차게 되고 OOME가 발생하게 된다. 이와 같은 경우에는 WAS가 제공하는버그 패치를 적용하거나 WAS를 주기적으로 Restart해야 한다.

Native Heap에서의 OOME

Java Heap과 Permanent Space가 Java와 관련된 Object들이 거주하는 공간인 반면, NativeHeap은 OS 레벨의 Native Object나 JNI Library 레벨의 Native Object이 거주하는 공간이다.

Native Heap에서 OOME가 발생하면 다음과 같은 에러 메시지가 출력된다.

java.lang.OutOfMemoryError: request bytes for . Out of swap space? 또는
java.lang.OutOfMemoryError: (Native method)' 또는
java.lang.OutOfMemoryError: unable to create new native thread


첫번째 메시지는 VM code 레벨에서 메모리 부족 현상이 발견된 경우이다. 두번째 메시지는 JNI나 Native Method에서 메모리 부족 현상이 발견된 경우에 해당한다. 세번째 메시지는 Thread를 생성할 수 없을 때 발생한다. Thread는Native Heap 공간의 메모리를 필요로 하기 때문에 Native Heap 공간의 메모리가 부족하면 Thread 생성시OOME가 발생한다.

Native Heap에서 메모리 부족이 발생하는 이유는 매우 다양하다.

  • Thread Stack Space가 부족한 경우
  • Virtual Space Address가 소진된 경우
  • Swap Space가 모자란 경우
  • JNI Library에서 Memory Leak이 발생하는 경우

Thread Stack Space와 OOME

Java Thread는 Native Heap 공간에 Stack Trace를 저장할 공간을 필요로 한다. ThreadStack Space의 크기는 -Xss 옵션을 통해 지정된다. -Xss 옵션을 통해지정되는 공간은 개별 Thread가 사용하는 공간이다. 만일 N개의 Thread가 활성화되면 N* 만큼의메모리 공간이 필요하다.

대부분의 OS에서 Thread Stack Size는 512K ~ 1M 사이다. 따라서 많은 수의 Thread가 활성화되면 Thread Stack Space만으로도 큰 크기의 Native Heap 메모리 공간을 소모한다.

Thread Stack Space 문제에 의한 OOME를 해소하는 방법은 다음과 같다.

  • Thread의 수를 줄인다. 동시에 수십개 이상의 Thread를 사용하는 것은 메모리의 문제 뿐만 아니라 지나친 Context Switching으로 인해 성능을 저하시키는 요인이 된다. Thread Pool 기법을 사용해서 동시 Thread의 수를 줄인다. 대부분의 WAS들이 Thread Pool 기법을 사용하고 있다.
  • Thread Stack Size를 줄인다. 대부분의 OS에서 Thread Stack Size는512K ~ 1M이다. 만일 많은 수의 Thread가 필요한 Application이라면 Thread Stack Size를줄임으로써 OOME를 방지할 수 있다. 많은 경우 -Xss128k 정도나 -Xss256k 정도의 크기에서도 문제없이 작동한다.단, Stack Size가 줄어든 만큼 Stack Overflow Error가 발생할 확률은 높아진다.
  • Java Heap 크기를 줄인다. 32bit Process가 사용 가능한 메모리 공간은 OS에따라 2G ~ 4G로 제한된다. 하나의 Java Process가 사용 가능한 공간은 [Java Heap+PermanentSpace+Native Heap]으로 이루어진다. 따라서 Java Heap이 지나치게 큰 공간을 사용하는 경우 NativeHeap에서 사용 가능한 공간이 줄어들게 된다. 따라서 Java Heap 크기를 줄이면 Native Heap의 메모리 부족에의한 OOME 문제를 해결 할 수 있다. 하지마 Java Heap 크기를 지나치게 줄이면 Java Heap 부족에 의한 OOME현상이 발생할 수 있으므로 유의해야 한다. Java Heap 크기를 줄이는 방법은 Thread Stack Space의 부족 문제뿐 아니라 Native Heap 부족에 의한 OOME 문제를 줄이는 공통적인 해결 방법이다.
  • 64bit JVM을 사용한다. 64bit JVM에서는 32bit JVM Process가 가지는2G ~ 4G의 제한이 없다. 따라서 Native Heap의 메모리 부족 문제가 줄어든다. 이 방법 또한 Native heap부족에 의한 OOME 문제를 줄이는 공통적인 해결 방안이다.

64bit JVM을 사용하는 경우, 다음과 같은 사실에 유의해야 한다.

  1. 일반적으로 32bit Application의 성능이 64bit Application에 비해 더 나은 성능을보이는 경우가 많다. 따라서 64bit JVM을 사용하는 경우 약간의 성능 저하가 발생할 수 있다는 사실에 유의해야 한다.
  2. 과도한 Virutal Memory의 사용은 Application의 성능을 저하시키는 주요인이다. JavaApplication의 성능은 모든 Object들이 Physical Memory에 머물러 있을때 가장 뛰어나다. 만일Physical Memory를 초과하는 크기의 Virtual Memory를 사용하면 Physical Memory의 일부를Disk에 저장하는 Paging In/Out이 발생한다. Paging In/Out은 Memory Operation에 비해 매우느리며 그만큼 Application의 성능도 저하된다.


Virtual Address Space와 OOME

32bit JVM에서 사용가능한 Virtual Address Space의 최대 크기는 OS에 따라 2G ~ 4G로제한된다. Java Process의 경우 Java Heap과 Permanent Space를 제외한 나머지 공간만을 NativeHeap이 사용할 수 있다. 가령 2G의 Virtual Address Space만이 사용가능하다고 가정하자. 이 때 JavaHeap이 1G, Permanent Space가 200M를 사용한다면 Native Heap이 사용 가능한 최대 크기는 800M에불과하다. 800M 중에는 OS가 Process 관리를 위해 사용하는 기본 메모리가 포함되기 때문에 실제로 JavaApplication이 사용 가능한 Native Heap의 크기는 훨씬 줄어든다. 따라서 이 경우 Native Heap 공간부족에 의한 OOME가 발생할 확률이 높아진다.

Virtual Address Space 부족에 의한 OOME를 해결하는 방법은 Thread Stack Space에의한 OOME 해결방안과 일맥상통한다. Java Heap 크기를 줄이거나 64bit JVM를 사용한다. Thread 수를줄이거나 Thread Stack Size를 줄임으로써 Native Heap 공간을 확보하는 것도 방법이 될 수 있다.

Swap Sapce와 OOME

Physical Memory를 초과하는 Virtual Memory 요청이 발생하면 Paging In/Out을 통해 필요한 메모리를 확보한다. Paging In/Out을 위한 공간이 Swap 공간이다. 따라서 Swap Space가 부족하면 Paging In/Out에 실패하고 이로 인해 OOME가 발생한다.

여러 개의 Process가 Swap Space를 사용하는 경우 Swap Space 부족에 의한 OOME가 발생할확률이 높아진다. OS가 제공하는 툴들을 통해 Swap Space와 Paging In/Out을 모니터링해야 하며, SwapSpace가 부족한 경우에는 크기를 키워주어야 한다.

OOME와 Fatal Error Log

Native Heap에서 OOME가 발생하면 JVM은 심각한 상황이라고 판단하고 Fatal Error Log를 남긴다. 아래에 OOME가 발생한 상황에서의 Fatal Error Log의 Header 정보에 대한 간단한 Sample이 있다.

#
# An unexpected error has been detected by Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 20971520 bytes for GrET in C:BUILD_AREA
jdk6_02hotspotsrcsharevmutilitiesgrowableArray.cpp. Out of swap space?
#
# Internal Error (414C4C4F434154494F4E0E494E4C494E450E4850500017), pid=5840, ti
d=5540
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0_02-b06 mixed mode)
# An error report file with more information is saved as hs_err_pid5840.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#

Fatal Error Log를 통해 OOME를 유발한 Thread와 Stack Trace를 추적할 수 있다. 이 정보가 곧 해결책을 의미하지는 않지만, 추가적인 분석을 위한 힌트가 될 수 있다.

'Programer > JAVA/C#' 카테고리의 다른 글

[C#] Server쪽 port와 Local쪽 포트 찾기  (0) 2013.02.01
byte 한글 깨지는 현상  (0) 2012.12.20
jdbc - mssql 인스턴스 연결  (0) 2011.12.26
java yyyyMMddHHmmss 이상의 date  (0) 2011.12.09
JAVA URL HTTP/HTTPS 통신  (0) 2010.09.30

Programer/DB

tcpdump 사용법

2012. 8. 14. 18:08

tcpdump 사용법

tcpdump 기본 사용법

# tcpdump -i eth0 => 특정 ethernt(eth0) 으로 송수신 되는 데이터 패킷 덤프하여 확인
# tcpdump -i eth0 -w TCPDUMP => 특정 ethernet으로 송수신 되는 패킷들 파일에 저장 및 확인
# tcpdump -r TCPDUMP => TCPDUMP에 저장된 패킷헤드들을 확인
# tcpdump -i eth0 -c 10 => 특정 ethernet에서 지정한 개수만큼의 네트워크 패킷 덤프하여 확인

[[주로 사용하는 방법!!!]]

# tcpdump -w tcpdump.log -s 1500 tcp port 22 and host 192.168.0.1
=> 서버의 특정포트로 송수신되는 모든 데이터패킷 전체를 확인


이 명령의 의미는 현재 로컬서버와 192.168.0.00서버사이의 통신데이터패킷 중 tcp 22번포트의
모든 패킷을 1500길이로 캡쳐하여 tcpdump.log파일에 저장

# tcpdum -Xqnr tcpdump.log => 캡쳐한 tcpdump.log파일의 내용을 ASCII모드로 확인



# tcpdump -q \( dst net 1.2.3.0/24 or 1.2.4.0/25 \) and dst port 80

; 목적지 주소가 1.2.3.x/24 와 1.2.4.x/25 이고 80번포트인 패킷 캡쳐



- # tcpdump host A

; A 호스트로/부터의 모든 도착/출발 패킷 출력
- # tcpdump host A and \( B or C \)

; A 호스트와 B 또는 C 사이의 모든 트래픽 출력
- # tcpdump ip host A and not B

; A호스트와 B를 제외한 호스트 간의 모든 IP 패킷 출력
- # tcpdump net ucb-ether

; 로컬호스트와 Berkeley의 호스트들 간의 모든 트래픽 출력
- # tcpdump 'gateway A and (port ftp or ftp-data)'

; 게이트웨이 A를 통한 모든 ftp 트래픽 출력
- # tcpdump ip and not net

; 로컬네트워크로/부터가 아닌 모든 트래픽 출력
- # tcpdump 'tcp[13] & 3 != 0 and not src and dst net '

; 로컬네트워크가 아닌 TCP 시작과 마지막 패킷 출력
- # tcpdump 'gateway A and ip[2:2] > 576'

; 게이트웨이 A를 통해 보내지는 576 Bytes보다 긴 IP 패킷 출력
- # tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'

; 이더넷이 아닌 IP 브로드 또는 멀티 캐스트 패킷 출력
- # tcpdump 'icmp[0] != 8 and icmp[0] != 0'

; echo 요청/응답이 아닌 모든 ICMP 패킷 출력 (ping 아닌 패킷)
- # tcpdump src net 1.2.3 or 1.2.4 and not dst net 1.2.3 or 1.2.4

; 1.2.3 과 1.2.4 IP주소 (내부) 패킷을 제외한 모든 패킷 출력
- # tcpdump -i br1

; br1 인터페이스의 모든 패킷 출력

 

 

출처 : http://iniciel.blogspot.kr/2009/07/tcpdump-%EC%82%AC%EC%9A%A9%EB%B2%95.html 

이벤트 당첨으로 받게된 SUDDEN 200!!!

 

일단 기본스펙은 사이트 사진으로 대체~~~!!^^

 

 

 

한전테크에서 2012년 5월에 출시한 아직은 따끈따끈한 새삥!!

 

일단 택배가 회사로 와서 조금 안습 ㅜ.ㅜ 집까지 들고가는데 빡쌤 ㅜ.ㅜ

 

 

 

영어라서 잠깐 당혹했지만... 역시 ... 뭐 그단어가 그단어다...

 

이전 케이스가 싸구려긴 했지만 택배로 보내지면서 던졌는지... 앞에 다 뿌셔지고......

 

그냥 그렇게 사용하고 있었는데... 때마침... ㄳㄳㄳㄳㄳㄳㄳㄳ X 10000000

 

ㅋㅋㅋ

 

 

 

 

이뿌다.. +_+......오... 간지인데??? 실제 조립이 끝나고 난뒤면 앰블럼쪽에 파란 불이... +_+ 오오옷 기대기대기대

 

 

 

추가 구성품까지.... 괜찮네.....

 

 

 

위쪽에는 마이크단자, 이어폰단자, USB3.0, USB2.0, +a

 

요로코롬 되어 있구먼... 좋쿠나~

 

 

 

' ') 요놈은 이전 케이스... 흠... 뭐 싸구려 케이스가 그게서 그게인듯... 초라하구나...

 

 

 

 

뭐... 설명이 필요한가??...... 고급스러워보이고 이뿌다 ㅜ.ㅜ .... 크.......

 

 

파랭이...... +_+

 

 

 

 

추가 BLUE-RAY | CD ROM 은 위와 같이 그냥 살짝 제껴주면 장착 자리가 나온다... 편하구먼...

 

 

 

 

 

이뿌네요 ㅜ.ㅜ 잘쓰겠음돠~~~

'Reviewer' 카테고리의 다른 글

JBL CLUB PRO+ TWS 구매후기  (0) 2021.10.03
Mini Camera  (0) 2011.11.07
[VIBE HOLIC 진동스피커]  (0) 2010.11.13
드라이버 공구 셋트[ JK-6088A★38IN1★ ]  (4) 2010.11.13
[Mobile Power Station]  (0) 2010.11.04

 

리스너를 가동 시켰는데 아래와 같은 현상이 발생

 

TNS-12555: TNS:permission denied
 TNS-12560: TNS:protocol adapter error
  TNS-00525: Insufficient privilege for operation
   Linux Error: 1: Operation not permitted

 

ㅡ,.ㅡ;;;; 뭐지 이건...

찾다 찾다 해결책 찾음..

역시 나보다 먼저 삽질하신분은 항상 존재하는군요. ㅋㅋㅋ


 

chmod 777 /var/tmp/.oracle << 이 path 가 맞습니다.

 

젤 문제는 chown 이겁니다.

안되시는분은 아마 root 이거나 그룹이 엉뚱하거나 이럴겁니다.

해당 oracle과 그 해당하는 그룹으로 변경하세요.

저의 경우는 oracle:oinstall 입니다.

그래서

 

[root@redhat tmp]# chown oracle:oinstall .oracle
[root@redhat tmp]# ls -al
total 16
drwxrwxrwt.  4 root   root     4096 Apr  5 17:21 .
drwxr-xr-x. 22 root   root     4096 Jan 13 15:54 ..
drwxrwxrwt.  2 oracle oinstall 4096 Mar 20 17:15 .oracle
drwx------.  5 ccuser ccuser   4096 Mar 19 15:26 kdecache-ccuser 

 

 

 [oracle@redhat ~]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 16-APR-2012 10:33:22

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Starting /oracle/11gr2/product/11.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /oracle/11gr2/product/11.2.0/db_1/network/admin/listener.ora
Log messages written to /oracle/11gr2/diag/tnslsnr/redhat/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.10.233)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                16-APR-2012 10:33:24
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/11gr2/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /oracle/11gr2/diag/tnslsnr/redhat/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.10.233)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@redhat ~]$

 

참고 한 곳은 아래와 같습니다.

 

http://blog.naver.com/feelwoo?Redirect=Log&logNo=100068437656 : 쌩뚱보이

'Programer > DB' 카테고리의 다른 글

ORA-12505 에러  (0) 2013.01.17
tcpdump 사용법  (0) 2012.08.14
ORA-00600  (0) 2012.03.21
SQL0964C 데이터베이스의 트랜잭션 로그가 가득찼습니다.[DB2]  (0) 2011.02.25
ORA - 14155 : missing PARTITION or SUBPARTITION keyword  (0) 2010.11.08

Programer/DB

ORA-00600

2012. 3. 21. 10:52

이리저리 서버가지고 놀던중 어라? 뭐지 이건? 뜬금없이 오라클이 띄워지지 않는다... 뷁~~~ -_-;;;

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 21 10:52:06 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORA-00600: internal error code, arguments: [keltnfy-ldmInit], [46], [1], [], [], [], [], []

이건 도대체 무슨 에러인거야~~~~

확인 결과..... 실제 호스트명과  /etc/hosts  안에 호스트명이 달랐다고 한다..

나의 경우는
127.0.0.1      localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6

요런 놈( '') 을 (.. ) 요렇게 바꾸어 주었다.

127.0.0.1       janus0105 localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6

뭐.. 간단하구먼....

[top 실행 시 많이 사용된는 옵션]

top -d 0.5 -c -u ysoftman

(delay) -d 0.5 : 0.5초 마다 화면을 갱신

(user) -u ysoftman : ysoftman 사용자 소유의 프로세스를 표시

(command) -c : 프로세스를 실행시켰을 때의 명령줄을 표시

 

[top 실행 후 명령]

space bar : refresh

d 입력 후 딜레이 값 입력 : 입력한 딜레이 값에 따라 refresh

u 입력후 사용자이름 입력 : 사용자 소유의 프로세스 표시

k 입력후 PID 입력 : pid 에 해당하는 프로세스 종료

B : 상단정보 및 running 프로세스 정보를 bold로 표시/해제

b : running 프로세스 정보를 하이라이트하여 표시/해제

x : b 또는 B 로 표시할때 colum 하이라이트 표시/해제 

y : b 또는 B 로 표시할때 row 하이라이트 표시/해제 

R : 정렬 변경 (오름차순/내림차순)

z : 컬러/모노 표시

c : 명령줄 표시/해제

l : load average 줄 표시/해제

t : task cpu states 줄 표시/해제

m : memory 줄 표시/해제

i : idle 프로세스 표시/해제

H : thread 표시/해제

o : 항목 내용 표시 순서 변경(항목에 대한하는 알파벳(대/소문자)로 순서 변경)

q : 종료

 

[top 으로 리소스 사용량을 볼 때 각 항목에 대한 설명]


PID(ProcessID) : 프로세스 ID

USER : 프로세스를 실행시킨 사용자

PR(Priority) : 프로세스 우선순위

NI(Nice value) : 프로세스 NICE 값(음수값이 우선순이가 높음)

VIRT(Virtual Image (kb)) : 프로세스가 사용하고 있는 가상 메모리 사용량

RES(Resident Size (kb)) : 프로세스가 사용하고 있는 페이지의 크기

SHR(Shared Mem Size (kb))  : 프로세스가 사용하고 있는 공유 메모리 크기

S(Process Status) : 프로세스 상태(R(Running), S(Sleeping), T(stopped Trace) W(Swapped out), Z(Zombie))

%CPU(CPU Usage) : 프로세스의 CPU 사용률

%MEM(Memory Usage) : 프로세스의 메모리 상용률

TIME+(CPU Time : 프로세스가 CPU 를 사용한 시간

COMMAND : 프로세세를 실행한 명령



<<스 장비에 한함>>

파일 하나 만드시고
저같은 경우에는
vi core.sh 하셔서 안에

CHIP_COUNT=`cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l`;
CHIP_CORES=`cat /proc/cpuinfo | grep "siblings" | tail -1 | cut -d: -f2`;
echo "CPU: $CHIP_COUNT chips x $CHIP_CORES cores"

:wq!
하시면 저장후 빠져 나오는거 아시죠?
그런다음 파일의 권한을 수정해주세요
chmod 755 core.sh
하신다음
./core.sh
하시면

CPU: 1 chips x  4 cores

이런식의 값을 볼수 있습니다.

출처 : http://superkkt.com/389

'Programer > UNIX' 카테고리의 다른 글

too many open files (errno 24)  (0) 2013.06.20
Linux top 사용과 정보 설명  (0) 2012.02.22
HP-UX System의 system date  (0) 2010.03.09
xManager를 대신할....  (0) 2010.01.11
JDK 설치 AIX O/S  (0) 2010.01.08