今天的系统获取新的版本后部署时突然tomcat无法启动,而比较版本的变化内容,也就是几个jsp和js文件的变化,对于web.xml等都没有调整。

这个问题很是奇怪,下面把步骤总结一下,以避免类似的问题再次发生。

1 现象描述

已经发布的系统,IDE下运行正常,使用tomcat本身的startup.sh启动也正常

但是使用sudo start.sh 启动,日志中出现类似如下信息

StandardContext Start

Server: Error filterStart

造成系统无法进入

2 解决步骤

先使用关键字StandardContext Error filterStart进行搜索,可以看到很多人描述这个问题,但大都是以下2个大点:

v 配置问题

v JDK,Tomcat版本问题

而初步分析和如上的现象基本无关,因为如上的运行是在一个机器上,JDK和tomcat使用的是一个版本;配置肯定是对的,否则单独的startup.sh也不能正常启动了。

那现在初步定为为war的问题,因此把部署的目录删除,然后任意放入一个html页面,使用sudo startup.sh启动,页面可以正常访问,因此基本可以确定war的文件某些内容影响了系统的加载,但具体是哪个呢?

那接着查查sudo的这个差别在哪里,查阅google,可见sudo运行时的环境变量不一样,由此可以猜测,系统的库可能有一定的影响,使用ubuntu自动系统进程查看文件差别也没有遭到差别,经过多次的反复测试[消耗了无数的脑细胞],突然想到,是否还是JDK的问题呢?因为系统的JDK升级过,从openjdk换成了oracle jdk,为了重现,只好把openjdk再清理一次,oracle jdk再安装一次,然后再启动,竟然好了。

原来还真是残留的某些文件对系统有影响,具体是哪个因为不好再次在线就没有再试了。

3 总结

sduo的差别问题具体总结:

http://stackoverflow.com/questions/15791488/different-environment-when-running-sudo-as-root

sudo removes LD_LIBRARY_PATH, LD_PRELOAD from the environment (I suspect it does it for root as well as ordinary users). This may cause different libraries to be loaded for the program.

sudo can be configured on what variables it resets/clears - see http://brandonhutchinson.com/wiki/Sudo_and_environment_variables

ubuntu的进程查看较弱,如果可以查看到加载的库文件等,估计可以较快的确定问题,不过没有接触到在Linux下像sysinternal的procmon procexp这样的强劲工具,现在专门查了一下,还真有些工具,可以作为以后的工具箱:

http://sourceforge.net/projects/procexp/

Graphical process explorer for Linux.

http://superuser.com/questions/285572/equivalent-to-sysinternals-process-explorer-on-linux

4 工具

对于出现类似问题的同学,专门写了一个jdk的安装和清理脚本,如果出现类似的问题时不妨一试。下面是具体的脚本:

OpenJDK卸载脚本

#openjdk6:tomcat运行消耗内存太大;Spirng IDE泄漏的问题,因此换为Oracle JDK

#如下是删除openjdk的方法

sudo dpkg -P openjdk-6-jdk

sudo apt-get remove openjdk-6-jdk

sudo apt-get remove openjdk-6-jre

sudo apt-get remove openjdk-6-jre-headless

sudo apt-get autoremove openjdk-6-jre-lib

#clear the config

dpkg -l |grep ^rc|awk '{print $2}'| sudo xargs dpkg -P

#old openjdk/openjre

if [ -d /usr/lib/jvm/java-6-openjdk ]; then

rm -r -f /usr/lib/jvm/java-6-openjdk

rm -f /usr/bin/java

rm -f /usr/bin/javac

fi

Oracle JDK的安装

#!/bin/bash

#old openjdk/openjre

#old is in:: /usr/lib/jvm/java-6-openjdk

#sudo dpkg -P openjdk-6-jdk

#sudo dpkg -P openjdk-6-jre

#sudo dpkg -P openjdk-6-jre-headless

#sudo dpkg -P openjdk-6-jre-lib

#ORACLE JDK

if [ -d /usr/lib/jvm/jdk1.7.0_25 ]; then

rm -r -f /usr/lib/jvm/jdk1.7.0_25

fi

mkdir -p /usr/lib/jvm

sudo tar -xzvf server-jre-7u25-linux-x64.tar.gz -C /usr/lib/jvm

echo 'Oracle JDK install ok'

#ENV

sudo echo 'export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_25' >> /etc/profile

sudo echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile

sudo echo 'export CLASSPATH=.:$JAVA_HOME/lib' >> /etc/profile

source /etc/profile

#set binary

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_25/bin/java 300

sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_25/bin/javac 300

echo 'Oracle JDK env install ok'

Tomcat系统部署启动问题分析一例[sudo 启动]的更多相关文章

  1. external-provisioner源码分析(3)-组件启动参数分析

    更多ceph-csi其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 external-provisioner源码分析(3)-组件启动参数分析 本文将对extern ...

  2. Tomcat系统架构分析

    Tomcat系统架构分析 关于这边blog呢,实际开发中并不会用到,但是我觉得还是很有必要认真的写一下.毕竟我们每天在本地撸码的时候使用的就是tomcat来做web服务器.一个常识就是说我们本地在to ...

  3. 粗浅看 Tomcat系统架构分析

    原文出处: 吴士龙 http://www.importnew.com/21112.html Tomcat的结构很复杂,但是Tomcat也非常的模块化,找到了Tomcat最核心的模块,就抓住了Tomca ...

  4. linux系统tomcat项目部署和tomcat访问日志

    一.只用ip地址访问 先把端口号改成80,然后用 <Host name="localhost"  appBase="webapps"    137     ...

  5. tomcat下部署了多个项目启动报错java web error:Choose unique values for the 'webAppRootKey' context-param in your web.xml files

    应该是tomcat下部署了多个项目且都使用log4j. <!--如果不定义webAppRootKey参数,那么webAppRootKey就是缺省的"webapp.root". ...

  6. 【Tomcat】热部署的遗留配置导致服务器无法启动

    1.问题描述: 今天用myeclipse写了个小demo,然后用Tomcat7 部署了,接着点击启动服务器,服务器居然报错: 严重: Error starting static Resources j ...

  7. Ubuntu系统部署tomcat并启用JMX实战案例

    Ubuntu系统部署tomcat并启用JMX实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装JDK环境 1>.更换阿里云的软件源 [root@zabbix_g ...

  8. 轻松应对并发问题,简易的火车票售票系统,Newbe.Claptrap 框架用例,第一步 —— 业务分析

    Newbe.Claptrap 框架非常适合于解决具有并发问题的业务系统.火车票售票系统,就是一个非常典型的场景用例. 本系列我们将逐步从业务.代码.测试和部署多方面来介绍,如何使用 Newbe.Cla ...

  9. Tomcat源码分析之—具体启动流程分析

    从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息 ...

随机推荐

  1. Network - curl和Wget

    curl - transfer a URL curl SYNOPSIS curl [options] [URL...] DESCRIPTION curl is a tool to transfer d ...

  2. CSS 魔法系列:纯 CSS 绘制图形(心形、六边形等)

    <CSS 魔法系列>继续给大家带来 CSS 在网页中以及图形绘制中的使用.这篇文章给大家带来的是纯 CSS 绘制五角星.六角形.五边形.六边形.心形等等. 我们的网页因为 CSS 而呈现千 ...

  3. 实例演示Android异步加载图片

    本文给大家演示异步加载图片的分析过程.让大家了解异步加载图片的好处,以及如何更新UI.首先给出main.xml布局文件:简单来说就是 LinearLayout 布局,其下放了2个TextView和5个 ...

  4. Windows Azure Virtual Network (7) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (2)

    <Windows Azure Platform 系列文章目录> 本文介绍的是,当用户在创建Azure Virtual Machine的时候,忘记绑定公网IP,需要重新绑定公网IP的具体操作 ...

  5. SQL Server中的事务日志管理(8/9):优化日志吞吐量

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  6. 如何解读SQL Server日志(3/3)

    如何查看被截断的日志 如果数据库做了日志备份操作,则日志会被截断,然后原来活动的VLF会被重用.使用sys.fn_dblog将会看不到任何被截断的日志.那如何查看日志备份中的日志呢?使用fn_dump ...

  7. Centos6.5 python升级成2.7版本出现的一些问题解决方法

    由于功能及程序依赖,需要将Centos上的python从2.6升级成2.7,把碰到的一些问题记录如下: 安装好2.7后将原来的/usr/bin/python改成/usr/bin/python26,并将 ...

  8. LeetCode - 51. N-Queens

    51. N-Queens Problem's Link ------------------------------------------------------------------------ ...

  9. .Net语言 APP开发平台——Smobiler学习日志:仿12306的APP登陆界面

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil ...

  10. 钉钉开发中post异步调用问题

    最近项目上在做钉钉开发中,经常会遇到使用post方式调用钉钉内部的方法(微信也有一样),这里涉及到跨域的post调用,但跨域一般都是用jsonp格式,而这个格式只支持get方式.尝试了挺多方法都没有返 ...