Monit을 사용하여 Apache Tomcat 서버를 모니터링할 때 발생하는 문제

Monit을 사용하여 Apache Tomcat 서버를 모니터링할 때 발생하는 문제

Ubuntu Linux 12.04.1 서버에서 다음 명령을 사용하여 Monit을 설치했습니다.

sudo apt-get install monit

Monit을 사용하는 주요 목표는 MySQL 및 Apache Tomcat 서비스가 종료/중지될 때 자동으로 다시 시작하는 것입니다.

#Check and restart mysql service
check process mysqld with pidfile "/run/mysqld/mysqld.pid"
group database
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host 127.0.0.1 port 3306 protocol mysql then restart
if 5 restarts within 5 cycles then timeout

위 코드는 완벽하게 작동하며 Monit은 MySQL 서비스를 다시 시작합니다(종료/중지된 경우).

실제로 Tomcat을 다음과 같이 구성했습니다. - Tomcat zip을 다운로드하고 특정 위치에 추출했습니다. - 이것을 내 데몬 서비스로 구성했습니다(내 Tomcat 서버가 제대로 작동합니다).

이 Tomcat 설정에 대한 pid 파일이 없으므로 Tomcat의 상태를 확인하고 다음 코드를 사용하여 시작할 계획입니다.

#Check and restart tomcat service
check host tomcat with address 127.0.0.1
stop program = "/etc/init.d/tomcat stop"
start program = "/etc/init.d/tomcat start"
if failed port 8080 and protocol http
then start

그러나 Tomcat을 성공적으로 시작할 수 없었습니다(죽었을 때). Monit 로그를 조사하면서 다음 메시지를 발견했습니다.

[UTC Dec 24 12:08:23] error    : 'tomcat' failed, cannot open a connection to INET[127.0.0.1:8080] via TCP
[UTC Dec 24 12:08:23] info     : 'tomcat' start: /etc/init.d/tomcat

위의 로그를 통해 Monit이 특정 시간(Tomcat 서비스가 종료된 것을 발견한 경우)마다 자동으로 Tomcat을 시작하려고 시도하는 것을 발견했습니다. 그러나 일부 내부 갈등으로 인해 이것이 중단됩니다!

기타 정보:

포트 8080을 사용하여 Tomcat 서버가 제대로 실행되고 있습니다.

netstat -an | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN     
tcp6       0      0 127.0.0.1:8080          127.0.0.1:53582         TIME_WAIT  


ps -ef|grep tomcat
root     16237     1  9 12:10 ?        00:00:37 /usr/lib/jvm/java-6-oracle/bin/java -Djava.util.logging.config.file=/usr/share/apache-tomcat-7.0.40/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1530m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=512m -XX:MaxPermSize=1024m -Djava.endorsed.dirs=/usr/share/apache-tomcat-7.0.40/endorsed -classpath /usr/share/apache-tomcat-7.0.40/bin/bootstrap.jar:/usr/share/apache-tomcat-7.0.40/bin/tomcat-juli.jar -Dcatalina.base=/usr/share/apache-tomcat-7.0.40 -Dcatalina.home=/usr/share/apache-tomcat-7.0.40 -Djava.io.tmpdir=/usr/share/apache-tomcat-7.0.40/temp org.apache.catalina.startup.Bootstrap start
root     16851 16847  0 12:17 ?        00:00:00 sh -c su root -c ps\ \-ef\|grep\ tomcat 2>&1 2>/dev/null
root     16852 16851  0 12:17 ?        00:00:00 su root -c ps -ef|grep tomcat
root     16853 16852  0 12:17 ?        00:00:00 bash -c ps -ef|grep tomcat
root     16855 16853  0 12:17 ?        00:00:00 grep tomcat

catalina.sh 파일에 PrepIPv4Addresses 및 PrepIPv4Stack 추가:

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1530m
-XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=512m -XX:MaxPermSize=1024m -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true"

모니터 로그:

[UTC Dec 24 12:48:39] error    : 'tomcat' failed protocol test [HTTP] at INET[127.0.0.1:8080] via TCP -- HTTP: Error receiving data -- Resource temporarily unavailable

누구든지 이것에 대해 안내해 주실 수 있습니까?

감사합니다.

답변1

Tomcat이 127.0.0.1의 ipv6 주소에 바인딩된 것 같습니다.

preferIPv4Stack=trueJava 옵션에서 및 지시어를 사용하여 preferIPv4Addresses=trueipv4 주소에 바인딩 할 수 있습니다.

Tomcat 시작 스크립트를 편집 catalina.sh하고 다음을 추가합니다.

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true"

관련 정보