카산드라의 동작을 상세히 알아보기 위해 디버깅을 해보기로 했다.

http://wiki.apache.org/cassandra/HowToDebug

위 사이트에 카산드라를 디버깅하는 방법이 나와있지만 너무 간단히 나와있기 때문에 조금 자세히 설명해 보기로 하겠당.


1. 다운로드

이클립스를 사용하여 디버깅 할 것이므로 이클립스와 디버깅할 카산드라의 소스를 다운받아야 한다.

http://eclipse.org

http://cassandra.apache.org/

 

2. 이클립스에서 자바 프로젝트를 만든다.

3. 소스의 내용을 프로젝트 안으로 전부 카피한다.

4. build.xml 파일을 ant로 build한다.

5. 여기서부터는 위키의 내용과 비슷하다.
    프로젝트의 properties로 가서 기존의 src폴더를 지우고 위키에 나와 있는 대로 수정한다.

1) src/gen-java
2) interface/thrift/gen-java
3) src/resources
4) src/java
5)
src/avro

6. build/classes를 라이브러리에 추가한다.

7. 다음 jar파일들을 라이브러리에 추가한다.

lib/*.jar
build/lib/jars/hadoop-core-*.jar,
build/lib/jars/jna-*.jar,
build/lib/jars/commons-logging-*.jar,
build/lib/jars/pig-*.jar,
build/lib/apache-rat-*.jar 

8. run/debug configuration을 만들어준다.

1) src/java에 있는 org.apache.cassandra.thrift.cassandradaemon 클래스를 메인 클래스로 지정한다.
2) classpath에 conf 폴더를 추가한다(advanced를 누르면 폴더를 추가할 수 있다.)
3) 다운받은 소스 중 bin/cassandra.bat을 열어 JAVA options 부분(set JAVA_OPTS로 시작되는 부분)아래부터 classpath 부분 전까지를 복사해서 VM arguments에 넣어준다.

-ea
 -javaagent:(workspace의 위치)/workspace/cassandra/lib/jamm-0.2.5.jar
 -Xms1G
 -Xmx1G
 -XX:+HeapDumpOnOutOfMemoryError
 -XX:+UseParNewGC
 -XX:+UseConcMarkSweepGC
 -XX:+CMSParallelRemarkEnabled
 -XX:SurvivorRatio=8
 -XX:MaxTenuringThreshold=1
 -XX:CMSInitiatingOccupancyFraction=75
 -XX:+UseCMSInitiatingOccupancyOnly
 -Dcom.sun.management.jmxremote.port=7199
 -Dcom.sun.management.jmxremote.ssl=false
 -Dcom.sun.management.jmxremote.authenticate=false
 -Dlog4j.configuration=log4j-server.properties
 -Dlog4j.defaultInitOverride=true


중간중간에 F5를 눌러서 프로젝트를 새로고침하는 것을 잊지 말고 여기까지 하면 기본적인 준비는 끝이 났다. 소스코드에서 에러도 뜨지 않을 것이다.

만약 다음과 같은 오류가 발생한다면



windows -> preferences -> Java -> Compile -> Errors/Warnings -> Deprecated and restricted API에서 Forbidden reference를 Error에서 warning으로 바꿔주면 된다.



자, 디버깅 해보자!


이클립스를 실행시 failed to create the java virtual machine과 같은 메세지가 나온다면 

이클립스 폴더의 eclipse.ini 파일을 열어서 수정해준다.

-vm
C:\Program Files\Java\jdk1.5\bin\javaw.exe(자바 설치 위치)

알맞게 각자의 위치로 설정해준다.

이래도 고쳐지지 않으면

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20120522-1813
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Xms40m
-Xmx512m


빨간색으로 표시된 부분을 알맞은 메모리 크기로 바꾸어준다.

이 오류는 아마도 이클립스가 실행될 때 자바 가상머신에 할당될 메모리가 부족해서 생기는 오류인 듯.

역시나 실험을 위해 SSD 두대를 RAID0으로 구성해보기로 한다.


구성을 하기에 앞서, RAID란 Redundant Array of Inexpensive Disks의 준말로, 여러대의 디스크를 가지고 안정성을 위해 같은 데이터를 다른 디스크에 중복 저장하거나 패리티를 사용하여 패리티 값을 저장하거나 한다.

RAID의 형태로는 9가지 정도가 있다.

RAID-0 : 이 방식은 스트라이프를 가지고는 있지만 데이터를 중복해서 기록하지 않는다. 따라서, 가장 높은 성능을 기대할 수 있지만, 고장대비 능력이 전혀 없으므로 이 방식은 진정한 RAID라고 하기 어렵다.

RAID-1, RAID-2, RAID-3, RAID-4, RAID-5, RAID-6, RAID-7, RAID-10, RAID-53


우리는 RAID-0을 사용해서 SSD두개를 묶은 다음 swap으로 사용하겠당.


# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdc1 /dev/sda1

SSD는 sdc1과 sda1에 각각 위치해 있다.

확인!



+ Recent posts