我绝对不是 tomcat 专家,但是在我看来这看起来不对劲......
Jan 24, 2014 10:05:34 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/jdk1.6.0_21/jre/lib/amd64/server:/usr/java/jdk1.6.0_21/jre/lib/amd64:/usr/java/jdk1.6.0_21/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Jan 24, 2014 10:05:34 PM org.apache.coyote.http11.Http11Protocol init
SEVERE: Error initializing endpoint
java.net.BindException: Address already in use <null>:8080
我每 15 分钟就会在 catalina.out 文件中看到同样的日志块,并且这种情况在这个应用程序上已经持续了 2 年多。这是否意味着 tomcat 每 15 分钟就会重新加载一次?
答案1
第一个是正常的。第二个意味着您已经有另一个进程绑定到端口 8080。您是否有两个 Tomcat 实例正在运行?您是否试图每 15 分钟启动第二个实例?... 这当然会失败。
答案2
原来是 puppet。我们运行的 tomcat 版本不能正确处理“service tomcat status”,因此每次 puppet 运行都无法通过 tomcat 的状态检查,启动“service tomcat start”时会失败并生成上述日志条目。但是,我认为这会给我们的服务带来其他几个问题,所以我自己在 tomcat 启动脚本中编写了一个状态函数:
status() {
proc=`ps aux | grep tomcat | grep catalina | awk '{print $2}'`
numproc=`echo $proc | wc -w`
if [ $numproc -gt 0 ]; then
echo "tomcat (pid $proc) is running..."
else
echo "tomcat is stopped..."
fi
}