snmpd 는 시스템의 자원들에 대해서 SNMP 프로토콜을 통해서 볼 수 있는 기능을 제공 한다. 그런데, 알고 싶은 자원들에 대한 목록들을 조회하기 위해 MIB 값들이 할당되어 있으며 자주 사용되는 운영체제, 라우터, 스위치 같은 장비들에 대한 MIB 값들을 미리 할당되어 전 세계적으로 표준으로 재정해 사용하고 있다. 그런데, 표준으로 재정된 MIB 값외에 사용자가 필요한 자원들을 조회하기 위한 MIB 값을 등록해야 하는데 이때 사용하는 것이 SNMP Extend 를 사용하면 된다. SNMP Extend 는 ‘.1.3.6.1.4.1.2021.8.10’ 같은 MIB 에 조회하고자하는 값들을 등록하면 된다. 예를들면 다음과 같다. […]
HyperText Transfer Protocol
HyperText Transfer Protocol 은 인터넷 미디어를 전송하기 위한 규약이다. 인터넷 미디어라는 단어를 쓰기는 했지만, 요즘에는 인터넷을 통해서 못하는게 없을 정도로 인터넷 미디어를 규정하는 매체의 경계는 없다. 따라서 “인터넷 미디어를 전송하기 위한 규약”은 구시대적인 정의이며 차라리 “인터넷을 이용한 웹을 사용할 경우에 쓰이게되는 규약” 정도가 더 잘 맞는듯 하다. HyperText 는 텍스트를 가지는 노드사이에 지역적인 링크(이걸 HyperLink라 한다)를 사용하는 구조적 텍스트를 말한다. 쉽게 말해서 웹사이트에서 링크를 클릭하면서 텍스트를 불러오는 텍스트 구조를 말하는 것이다. History 1989년 CERN (유럽 입자 물리학 연구소) 에 근무하던 […]
리눅스 시스템 자원 제한.
아주 접속이 많은 웹 서버를 운영하던중에 다음과 같은 종류의 메시지를 접하는 경우가 종종 있다.
|
1 |
Too many open files (24) |
너무나 많은 파일을 열었다는 건데, 도대체 무슨 파일을 열었다는건지 서비스하는 웹 페이지의 파일 개수도 많지도 않은데 말이다. 이 문서는 이러한 의문을 가지는 사람들 위한 것이다. 모든게 파일! 리눅스 시스템은 모든것이 파일이다. 장치도 파일이다. 그 유명한 /dev/ 디렉토리에 있는 팡리들이 바로 장치들이다. 저 파일들에게 cat 명령어로 데이터를 던져주면 그것을 알아먹는 장치는 동작하게 된다. 또, 리눅스에서 프로그램의 실행은 혼자 동작하는 것이 아니다. C 프로그램을 해본사람이라면 라이브러리(Library) 개념을 […]
Nginx KeepAlive
Nginx 에서 KeepAlive 관련된 설정은 다음과 같이 세가지이다. keepalive_disable keepalive_timeout keepalive_requests 먼저, Keepalive 는 HTTP 와 TCP 상에서 구현되어 있다. HTTP 의 경우에는 1.0 버전과 1.1 버전이 존재하는데, 1.0 버전에서는 KeepAlive 는 존재하지 않으며 1.1 에서는 연결시에 기본으로 KeepAlive 가 활성화 된다. HTTP 는 “Connetionless” 방법을 취한다. 웹 컨텐츠를 전송 받기 위해서 서버에 연결을 한 후에 데이터를 전송받는다. 그리고는 연결을 바로 끊게 된다. 하지만 웹이라는게 HTML, Javascript, CSS, Image 파일등으로 수백개로 이루어진 상태에서 수백의 컨텐츠를 전송하기위해서 연결을 수백번을 한다면 비 […]
tomcat jmx 소스
JMX 소스
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
import javax.management.MBeanServerConnection; import javax.management.ObjectName; import javax.management.openmbean.CompositeData; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import java.io.Console; public class check_jmx { public static final char ESC = 27; public static void main(String[] args) { // TODO Auto-generated method stub try { // Create an RMI connector client and // connect it to the RMI connector server // JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://127.0.0.1:9999/jmxrmi"); JMXConnector jmxc = JMXConnectorFactory.connect(url, null); MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); ObjectName tomcatThreadPoolObh = new ObjectName("Catalina:type=Executor,name=tomcatThreadPool"); Object activeCnt = mbsc.getAttribute(tomcatThreadPoolObh, "activeCount"); ObjectName memoryObh = new ObjectName("java.lang:type=Memory"); CompositeData memoryRes = (CompositeData) mbsc.getAttribute(memoryObh, "HeapMemoryUsage"); Console c = System.console(); if (c == null) { System.err.println("no console"); System.exit(1); } // clear screen only the first time c.writer().print(ESC + "[2J"); c.flush(); Thread.sleep(200); for (int i = 0; i < 100000; ++i) { // reposition the cursor to 1|1 c.writer().print(ESC + "[1;1H"); c.flush(); //c.writer().println("hello " + i); c.writer().println("activeCount = " + activeCnt); c.writer().println("HeapMemoryUsage committed = " + memoryRes.get("committed")); c.writer().println("HeapMemoryUsage init = " + memoryRes.get("init")); c.writer().println("HeapMemoryUsage max = " + memoryRes.get("max")); c.writer().println("HeapMemoryUsage used = " + memoryRes.get("used")); c.flush(); Thread.sleep(5000); } /* echo("activeCount = " + activeCnt); echo("HeapMemoryUsage committed = " + memoryRes.get("committed")); echo("HeapMemoryUsage init = " + memoryRes.get("init")); echo("HeapMemoryUsage max = " + memoryRes.get("max")); echo("HeapMemoryUsage used = " + memoryRes.get("used")); */ jmxc.close(); } catch (Exception e) { e.printStackTrace(); } } private static void echo(String msg) { System.out.println(msg); } } |
JMX 로 Tomcat 모니터링 하기.
톰캣(Tomcat)은 JEE의 Web Container 의 구현에 입니다. 흔히 WAS 서버라고 하죠. 많은 기능이 있지만 이번에는 JMX를 설정하고 이를 이용해서 Tomcat 을 모니터링 해보겠습니다. JMX는 Java Management eXtension 으로 자바 서비스들을 관리하고 모니터링하기위한 API를 제공하는 기능을 포함하는 기술입니다. Tomcat 오 자바 서비스의 일종임으로 JMX를 이용할 수 있습니다. 톰캣(Tomcat)의 경우에 아쉽게도 기본 배포본에 이를 위한 라이브러리가 포함되어 있지않아 이 기능을 이용하기 위해서는 톰캣용 JMX 라이브러리를 다운받고 톰캣을 재시작 해줘야 합니다.
|
1 2 |
# 톰캣버전에 맞는 JMX 를 다운받으시길 바랍니다. http://apache.mirror.cdnetworks.com/tomcat/tomcat-7/v7.0.57/bin/extras/catalina-jmx-remote.jar |
이 파일을 톰캣(Tomcat) 라이브러리 디렉토리인 lib 에 넣어줍니다. 그리고 톰캣(Tomcat)시작 스크립트에 […]
Cassandra 2.1.2 설치하기.
카산드라(Cassandra)는 분산 데이터 스토리지 시스템 입니다. 아파치 재단에서 오픈소스로 만들어 배포하고 있고, 자바기반으로 제작되었습니다. peer to peer 프로토콜을 이용한 고가용성이 구현되어 있습니다. 이 문서는 카산드라(Cassandra) 2.1.2 에 싱글(Single) 노드를 위한 설치에 대한 것입니다. 설치환경은 CentOS 입니다. jdk 7 update 75 카산드라(Cassandra) 2.1.2 는 jdk 7 update 75 버전 이상을 필요로 합니다. 만일 idk 버전 이하를 사용한다면 시작스크립트에서 오류를 내며 작동하지 않습니다. Oracle 홈페이지에서 jdk 7 update 75 를 다운받아 다음과 같이 압축을 해제합니다.
|
1 2 3 |
tar xvzf jdk-7u75-linux-x64.tar.gz -C /opt cd /opt ln -s jdk1.7.0_75 jdk |
카산드라(Cassandra) 2.1.2 설치 카산드라(Cassandra) 는 […]
top 사용시 command 매칭된것만 보기.
top 은 리눅스에서 아주 유용한 시스템 모니터링 툴 입니다. 매우 많은 옵션도 제공하는데, 그중에서 프로세스의 명령어와 매칭되는 것만 보여주기도 한다. -c 옵션이 그것인데, 다음과 같이 pgrep 과 조합해서 사용할 수 있다.
|
1 |
top -c -p $(pgrep -d',' -f 매칭할스트링) -H |
Tomcat Multi Instance 설정하기
Tomcat 7 서버는 Multi Instance 라는 기능을 가지고 있습니다. 하나의 엔진에 다수의 Instance 를 구동하게하는 것을 말합니다. Tomcat 7 용어 정리 Tomcat Multi Instance 설정하기 전에 용어를 설명하겠습니다. Tomcat 은 엔진과 인스턴스(Intance) 로 나뉩니다. 이는 디렉토리별로 구분이 가능한데, 엔진부분과 인스턴스 부분의 디렉토리는 다음과 같습니다. Tomcat Engine 부분: bin, lib Tomcat Instance 부분: conf, logs, temp, work, webapps 사실 Tomcat 을 다운받아 압축을 해제하면 엔진부분과 인스턴스부분이 함께 들어 있기 때문에 별 구별이 안되는 측면이 있지만 엄밀히 따지면 위와같이 구분을 할 수 […]
Tomcat 7 구조
이 문서는 Tomcat 7 구조 (Architecture) 에 관한 것입니다. 많은 부분을 “Apache Tomcat 7 More about the Cat” 을 참고 했습니다. Tomcat 7 의 구조는 계층적 구조를 보이며 계층적으로 상속관계에 있습니다. 이를 다이어그램으로 표시하면 다음과 같습니다. 이 구조는 Tomcat 의 설정 파일에서도 그대로 나타납니다. Tomcat 7 디렉토리 구조. bin: Tomcat 의 바이너리 및 스크립트들. conf: 모든 webapp 에 적용되는 글로벌 설정들. lib: 모든 webapp 에서 활용가능한 JAR-file 들. 기본적으로 servlet-api.jar(Servlet), jasper.jar(JSP), jasper-el.jar(EL). logs: 서버 로그 파일들이 있는 디렉토리. Catalina.{yyyy-mm-dd}}.log 는 […]