top 은 리눅스에서 아주 유용한 시스템 모니터링 툴 입니다. 매우 많은 옵션도 제공하는데, 그중에서 프로세스의 명령어와 매칭되는 것만 보여주기도 한다. -c 옵션이 그것인데, 다음과 같이 pgrep 과 조합해서 사용할 수 있다.
|
1 |
top -c -p $(pgrep -d',' -f 매칭할스트링) -H |
System Software Engineer
top 은 리눅스에서 아주 유용한 시스템 모니터링 툴 입니다. 매우 많은 옵션도 제공하는데, 그중에서 프로세스의 명령어와 매칭되는 것만 보여주기도 한다. -c 옵션이 그것인데, 다음과 같이 pgrep 과 조합해서 사용할 수 있다.
|
1 |
top -c -p $(pgrep -d',' -f 매칭할스트링) -H |
jstack 은 자바 애플리케이션의 쓰레드(Thread) 덤프를 뜰 수 있도록 도와주는 도구 입니다. 자바 애플리케이션의 쓰레드의 상태를 상세히 알 수 있어서 자바 애플리케이션의 프로파일링을 할 수 있고 이를 통해서 성능을 개선할 수 있습니다. 예를들면 다음과 같습니다.
|
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
2015-01-21 21:11:12 Full thread dump OpenJDK 64-Bit Server VM (23.25-b01 mixed mode): "Attach Listener" daemon prio=10 tid=0x00007fa830001000 nid=0x3c5a waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "ajp-bio-8309-AsyncTimeout" daemon prio=10 tid=0x00007fa85ca18000 nid=0x2e47 waiting on condition [0x00007fa8508f4000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.apache.tomcat.util.net.JIoEndpoint$AsyncTimeout.run(JIoEndpoint.java:152) at java.lang.Thread.run(Thread.java:701) Locked ownable synchronizers: - None "ajp-bio-8309-Acceptor-0" daemon prio=10 tid=0x00007fa85ca16000 nid=0x2e46 runnable [0x00007fa8509f5000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:375) at java.net.ServerSocket.implAccept(ServerSocket.java:478) at java.net.ServerSocket.accept(ServerSocket.java:446) at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60) at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:220) at java.lang.Thread.run(Thread.java:701) Locked ownable synchronizers: - None "http-bio-8380-AsyncTimeout" daemon prio=10 tid=0x00007fa85ca13800 nid=0x2e45 waiting on condition [0x00007fa850af6000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.apache.tomcat.util.net.JIoEndpoint$AsyncTimeout.run(JIoEndpoint.java:152) at java.lang.Thread.run(Thread.java:701) Locked ownable synchronizers: - None "http-bio-8380-Acceptor-0" daemon prio=10 tid=0x00007fa85ca12000 nid=0x2e44 runnable [0x00007fa850bf7000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:375) at java.net.ServerSocket.implAccept(ServerSocket.java:478) at java.net.ServerSocket.accept(ServerSocket.java:446) at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60) at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:220) at java.lang.Thread.run(Thread.java:701) Locked ownable synchronizers: - None "ContainerBackgroundProcessor[StandardEngine[Catalina]]" daemon prio=10 tid=0x00007fa85ca0f800 nid=0x2e43 waiting on condition [0x00007fa850cf8000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1513) at java.lang.Thread.run(Thread.java:701) Locked ownable synchronizers: - None "GroupChannel-Heartbeat-1" daemon prio=10 tid=0x00007fa85ca0b800 nid=0x2e40 waiting on condition [0x00007fa85100d000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.apache.catalina.tribes.group.GroupChannel$HeartbeatThread.run(GroupChannel.java:689) Locked ownable synchronizers: - None "Tribes-MembershipSender" daemon prio=10 tid=0x00007fa85ca0a000 nid=0x2e3e waiting on condition [0x00007fa85110e000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.apache.catalina.tribes.membership.McastServiceImpl$SenderThread.run(McastServiceImpl.java:580) Locked ownable synchronizers: - None "Tribes-MembershipReceiver" daemon prio=10 tid=0x00007fa85ca08800 nid=0x2e3d runnable [0x00007fa85120f000] java.lang.Thread.State: RUNNABLE at java.net.PlainDatagramSocketImpl.receive0(Native Method) - locked <0x00000000a5730da0> (a java.net.PlainDatagramSocketImpl) at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:136) - locked <0x00000000a5730da0> (a java.net.PlainDatagramSocketImpl) at java.net.DatagramSocket.receive(DatagramSocket.java:759) - locked <0x00000000a5803e80> (a java.net.DatagramPacket) - locked <0x00000000a5803e48> (a java.net.MulticastSocket) at org.apache.catalina.tribes.membership.McastServiceImpl.receive(McastServiceImpl.java:339) at org.apache.catalina.tribes.membership.McastServiceImpl$ReceiverThread.run(McastServiceImpl.java:533) Locked ownable synchronizers: - None "NioReceiver" daemon prio=10 tid=0x00007fa85c9da800 nid=0x2e3c runnable [0x00007fa851310000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:228) at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:83) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87) - locked <0x00000000a57ca768> (a sun.nio.ch.Util$1) - locked <0x00000000a57ca758> (a java.util.Collections$UnmodifiableSet) - locked <0x00000000a57ca710> (a sun.nio.ch.EPollSelectorImpl) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98) at org.apache.catalina.tribes.transport.nio.NioReceiver.listen(NioReceiver.java:283) at org.apache.catalina.tribes.transport.nio.NioReceiver.run(NioReceiver.java:433) at java.lang.Thread.run(Thread.java:701) Locked ownable synchronizers: - None "GC Daemon" daemon prio=10 tid=0x00007fa85c934000 nid=0x2e38 in Object.wait() [0x00007fa85183a000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000a55cc360> (a sun.misc.GC$LatencyLock) at sun.misc.GC$Daemon.run(GC.java:117) - locked <0x00000000a55cc360> (a sun.misc.GC$LatencyLock) Locked ownable synchronizers: - None "Low Memory Detector" daemon prio=10 tid=0x00007fa85c0fa000 nid=0x2e36 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C2 CompilerThread1" daemon prio=10 tid=0x00007fa85c0f8000 nid=0x2e35 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C2 CompilerThread0" daemon prio=10 tid=0x00007fa85c0f5000 nid=0x2e34 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Signal Dispatcher" daemon prio=10 tid=0x00007fa85c0f2800 nid=0x2e33 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Finalizer" daemon prio=10 tid=0x00007fa85c0a4000 nid=0x2e32 in Object.wait() [0x00007fa85254c000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000a57188a8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133) - locked <0x00000000a57188a8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:189) Locked ownable synchronizers: - None "Reference Handler" daemon prio=10 tid=0x00007fa85c0a2000 nid=0x2e31 in Object.wait() [0x00007fa85264d000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000a57ff5a0> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133) - locked <0x00000000a57ff5a0> (a java.lang.ref.Reference$Lock) Locked ownable synchronizers: - None "main" prio=10 tid=0x00007fa85c009000 nid=0x2e2b runnable [0x00007fa86611b000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:375) at java.net.ServerSocket.implAccept(ServerSocket.java:478) at java.net.ServerSocket.accept(ServerSocket.java:446) at org.apache.catalina.core.StandardServer.await(StandardServer.java:453) at org.apache.catalina.startup.Catalina.await(Catalina.java:777) at org.apache.catalina.startup.Catalina.start(Catalina.java:723) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:622) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:321) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455) Locked ownable synchronizers: - None "VM Thread" prio=10 tid=0x00007fa85c093000 nid=0x2e30 runnable "GC task thread#0 (ParallelGC)" prio=10 tid=0x00007fa85c016800 nid=0x2e2c runnable "GC task thread#1 (ParallelGC)" prio=10 tid=0x00007fa85c018800 nid=0x2e2d runnable "GC task thread#2 (ParallelGC)" prio=10 tid=0x00007fa85c01a000 nid=0x2e2e runnable "GC task thread#3 (ParallelGC)" prio=10 tid=0x00007fa85c01c000 nid=0x2e2f runnable "VM Periodic Task Thread" prio=10 tid=0x00007fa85c105000 nid=0x2e37 waiting on condition JNI global references: 127 |
문제는 이렇게 jstack 의 결과을 보면 당시 쓰레드에 OS 의 자원사용량을 알 방법이 없습니다. OS의 자원이라고 하면 CPU, MEM 등과 같은 것입니다. jstack 의 결과에는 tid 라고 해서 Thread ID 가 헥사(16 진수)로 표시됩니다. 이는 OS상에서 자바 애플리케이션의 쓰레드의 PID 를 가리킵니다. 그래서 jstack […]
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 구조 (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 는 […]
이 문서는 리눅스 Tomcat 7 설치 에 관한 문서 입니다. 1. Tomcat 7 스펙 Tomcat 7 의 스펙은 다음과 같습니다. Servlet: 3.0 JSP Spec: 2.2 EL Spec: 2.2 WebSocket: 1.1 Support Java Versions: 6 and later Java 1.6 버전 이상이 필요 합니다. CentOS 7 이라면 다음과 같이 설치할 수 있습니다.
|
1 |
yum install java-1.6.0-openjdk |
2. Download 다운로드는 Apache Tomcat 페이지에서 다운로드 한다. 3. 설치 설치는 압축을 해제하는 것으로 끝이 난다.
|
1 |
tar xvzf apache-tomcat-7.0.57.tar.gz -C /opt |
4. 테스트 Tomcat 7 에서는 환경을 테스트해 볼 수 있는 스크립트가 두가지 […]
CentOS 7 를 위한 mariadb-10.0.15 버전 입니다. 10.0.14 버전의 보안 패치를 적용하고 systemd 를 위한 스크립트가 포함되어 있습니다. 다운로드: http://linux.systemv.pe.kr/files/mariadb-10.0.15.tar.gz 설치방법: Mariadb 10 소스 설치
호스팅 서비스를 신청하면 으레 FTP 계정도 함께 사용할 수 있습니다. 요즘은 SFTP라고도 보안성이 뛰어난 FTP만 제공하는 곳도 있습니다. 그런데, 이걸 사용할 줄 모르시는 분들도 많습니다. 이 문서는 FTP 사용기(파일질라(FileZilla) 이용) 에 관한 것입니다. 1. 다운받기 웹 브라우저 주소창에 http://filezilla-project.org 를 치면 위 화면과 같이 나옵니다. 이 화면에서 초록색 박스 링크를 클릭 합니다. “Download Now” 를 클릭해서 파일을 다운로드 받습니다. 다운로드받은 파일을 더블클릭해서 설치를 해주세요. 특별한 옵션이 없기 때문에 그냥 “다음” 버튼을 클릭하기만하면 설치가 됩니다. 설치가 다되었다면 윈도우즈 메뉴에서 FileZilla 를 […]
CentOS 7 에서 많은 변화가 있지만 그 중에 하나가 싱글 모드(Single Mode) 부팅 입니다. CentOS 6 에서 싱글모드 부팅을 위해서 부팅 커널 이미지 옵션으로 1 을 입력하면 되었습니다. 하지만 CentOS 7 에서는 그렇게하면 안됩니다. 이 문서는 CentOS 7 싱글모드 부팅 을 어떻게 하는지에 대한 글 입니다. 1. 싱글모드 부팅 (Single Mode Booting) CentOS 7 에서는 부팅 매니저가 Grub2 로 변경 되었습니다. Grub2 부팅 매니저가 나오면 ‘e’ 를 클릭해서 부팅 커널 이미지를 선택 합니다. 그러면 선택한 커널 이미지에 대한 Grub2 의 […]
Bash 쉘은 명령어 히스토리 기능을 제공 합니다. history 명령어를 입력하면 지금까지 사용했던 Bash 명령어들이 모두 보여 줍니다. 이러한 기능은 사용자 홈 디렉토리에 ‘.bash_history’ 파일에 기록되어 집니다. 그러나 여러 사람이 사용하는 서버에서 각 사용자 홈 디렉토리에 히스토리를 남기기 보다는 리눅스의 syslog 에 남기게 함으로써 사용자가 못된 일을 하는지 않하는지를 감시하도록 하면 좋을 것입니다. 이 문서는 Bash History 를 Syslog 에 남기기 에 대한 것입니다. 1. logger 를 이용한 방법 logger 는 쉘 명령어를 syslog 에 적도록하는 모듈 입니다. 이를 이용하면 수동으로 […]
CentOS 7 은 많은 변화가 있었지만 그중 하나가 네트워크 인터페이스 이름 입니다. 지금까지 네트워크 인터페이스 이름은 eth0, eth1 식으로 고정되어 있었습니다. 하지만 CentOS 7 부터는 바이오스 장치 이름을 조합해서 생성됩니다. 다시 말해서 각 서버마다 네트워크 인터페이스 카드가 모두 동일하다고 할지라도 CentOS 7 에서의 네트워크 인터페이스 이름은 모두 다를 수가 있다는 겁니다. 이 문서는 CentOS 7 에서 네트워크 인터페이스 이름 바꾸기 에 대한 것입니다. 1. 상태확인 CentOS 7 에서의 네트워크 인터페이스 이름은 다음과 같습니다.
|
1 2 3 4 5 6 7 8 9 |
]# ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.105 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::a00:27ff:fe97:3935 prefixlen 64 scopeid 0x20<link> ether 08:00:27:97:39:35 txqueuelen 1000 (Ethernet) RX packets 37862 bytes 29870696 (28.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6939 bytes 513516 (501.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 |
enp0s3 으로 나옵니다. 네트워크 인터페이스 설정 […]