码迷,mamicode.com
首页 > 系统相关 > 详细

单个jetty 8.1.17跑多个应用的分析过程(分别用独立端口独立进程)

时间:2015-09-30 18:22:31      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:java   linux   jetty   jetty8   jetty8多应用   


单个jetty 8.1.17跑多个应用的分析过程(分别用独立端口独立进程)

一、搭建测试环境:

####系统版本信息####
CentOS release 6.7 (Final)

########################
####系统内核版本#####
Linux version 2.6.32-573.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) ) #1 SMP Thu Jul 23 15:44:03 UTC 2015

####jetty版本号#########
jetty-distribution-8.1.17.v20150415
 
####java版本#########
java version "1.7.0_79"
OpenJDK Runtime Environment (rhel-2.5.5.4.el6-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

####iptables状态#########
表格:filter

num  target     prot opt source               destination                
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:8080
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:9090



二、测试目标:实现“一个jetty8下,以独立端口进程跑多个应用”

webapp    :    8080端口:    进程号pidA
webapp2    :    9090端口:    进程号pidB



三、分析jetty的程序包README.txt 和网上整理,得到jetty启动方法:
第1种:#java -jar start.jar

第2种: #java -jar start.jar --dry-run jetty.port=8080 -ini=start.ini -Djetty.home=/usr/local/jetty_v8/ jetty.exttwars=ture -deamon etc/jetty.xml etc/jetty-webapps.xml  etc/jetty-logging.xml etc/jetty-jmx.xml

第2种变形:  #java -server -Xmx4096m -Xms4096m -Xss256k -XX:PermSize=128m -XX:MaxPermSize=256m -Djetty.home=/usr/local/jetty_v8 -Djava.io.tmpdir=/tmp -jar start.jar etc/jetty-logging.xml etc/jetty-started.xml

第3种:#/usr/local/jetty-distribution-8.1.17.v20150415/bin/jetty.sh



start.jar参数
# java -jar start.jar --help
    Usage: java -jar start.jar [options] [properties] [configs]

    options

    其中options列表(这指的是命令行参数,不是模块,由此可见jetty将内置的OPTIONS定义为模块多好)有:
        --version 列出版本号
        --list-options 列出当前start.config支持的所有OPTIONS
        --list-config 列出当前start.config内容(文本内容)
        --dry-run 列出当前配置要启动的java进程完整参数(不启动jetty服务)
        --exec 启动子进程(只有启动子进程才能修改-X,-D等参数,因为start.jar本身就是依靠java进程启动的,不能在运行时改变)
        --stop 停止运行的jetty实例
        --daemon 后台运行jetty,启动将stdout/stderr记录到${jetty.log}/start.log中(好了,这个变量jetty.log没有默认配置说明,估计是${jetty.home}/logs目录)
        --config=<file> 指定特别的start.config,以便覆盖内置的start.config.(经过测试,如果指定此文件,那么内置的配置将不再读取,这导致必须将所有配置写全,包括mainclass/jetty config/OPTIONS等)
        --ini=<file> 从配置文件中装载命令行参数。上面参数以及下面提到的参数是在太多,可以从配置文件中一次性加载,默认的配置文件是${jetty.home}/start.ini。
        --pre=<file> 指定特别的jetty运行配置文件,这个配置文件在后面提高的配置文件前面运行,相当于改变默认的装载机制。



其中java -jar start.jar --dry-run,可以检查配置文件加载情况;
默认情况都会读取父目录下的start.ini文件(里面是内容是制定其他配置文件加载路径);
另,通过分析bin/jetty.sh 文件,也将配置文件入口指向了 start.ini , 所以就从它入手了;

start.ini:
#===========================================================
# Start classpath OPTIONS.
# These control what classes are on the classpath
# for a full listing do
#   java -jar start.jar --list-options
#-----------------------------------------------------------
OPTIONS=Server,jsp,jmx,resources,websocket,ext,plus,annotations
#-----------------------------------------------------------
#===========================================================
# Configuration files.
# For a full list of available configuration files do
#   java -jar start.jar --help
#默认配置内容
#-----------------------------------------------------------
#etc/jetty-jmx.xml
etc/jetty.xml
etc/jetty-annotations.xml
# etc/jetty-ssl.xml
# etc/jetty-requestlog.xml
etc/jetty-deploy.xml
#etc/jetty-overlay.xml
etc/jetty-webapps.xml
etc/jetty-contexts.xml
etc/jetty-testrealm.xml
#===========================================================



找出所有 涉及 start.ini的文件 #find .|xargs grep -ri "start.ini", 经过分析发现bin下的jetty.sh也引用该文件。

换句话说,我设想通过下面方法实现多开:
#######分割线########

测试操作1是:

#java -jar start.jar --dry-run jetty.port=8080   -ini=start.ini   -Djetty.home=/usr/local/jetty_v8/  jetty.exttwars=ture -deamon   /usr/local/jetty_v8/etc/jetty.xml /usr/local/jetty_v8/etc/jetty-webapps.xml   /usr/local/jetty_v8/etc/jetty-logging.xml  /usr/local/jetty_v8/etc/jetty-jmx.xml

#java -jar start.jar --dry-run jetty.port=9090   -ini=start2.ini   -Djetty.home=/usr/local/jetty_v8/  jetty.exttwars=ture -deamon   /usr/local/jetty_v8/etc2/jetty.xml /usr/local/jetty_v8/etc2/jetty-webapps.xml   /usr/local/jetty_v8/etc2/jetty-logging.xml  /usr/local/jetty_v8/etc2/jetty-jmx.xml




#######分割线########

测试操作2:拷贝jetty.sh为jetty2.sh改成里面的start.ini 都改成 start2.ini,并将jetty2.sh 和 start2.ini里面内容的配置文件路径指向etc2目录下;

#/usr/local/jetty-distribution-8.1.17.v20150415/bin/jetty.sh start

#/usr/local/jetty-distribution-8.1.17.v20150415/bin/jetty2.sh start

#######分割线########


于是根据上述两个方法的操作,对jetty8的目录结构、文件改造>>>

├jetty_v8
├── bin
│   ├── jetty1.sh(配置JETTY_HOME="/usr/local/jetty-distribution-8.1.17.v20150415" ,(默认版本的副本)该副本命名仅便于观察)
│   ├── jetty2.sh(配置JETTY_HOME="/usr/local/jetty-distribution-8.1.17.v20150415" ,将jetty2.sh里面的start.ini改start2.ini   、 配置文件的路径均改到etc2下,注意进程号PID文件名也修改如 JETTY_PID="$JETTY_RUN/jetty2.pid" 和   JETTY_STATE=$JETTY_HOME/jetty2.state ,不然会报错的,忘记mark错误日志了 )
│   ├── jetty-cygwin.sh
│   ├── jetty.sh(配置JETTY_HOME="/usr/local/jetty-distribution-8.1.17.v20150415" ,默认版本)
│   ├── jetty-xinetd.sh
│   └── README.jetty-cygwin.txt.txt
├── contexts(一样的副本)
│   ├── javadoc.xml
│   ├── README.TXT
│   ├── test.d
│   │   └── override-web.xml
│   └── test.xml
├── contexts2 (一样的副本)
│   ├── javadoc.xml
│   ├── README.TXT
│   ├── test.d
│   │   └── override-web.xml
│   └── test.xml
├── contexts-available
│   ├── move-context.xml
│   ├── README.TXT
│   └── resources.xml
├── etc
│   ├── jdbcRealm.properties
│   ├── jetty-ajp.xml
│   ├── jetty-annotations.xml
│   ├── jetty-bio-ssl.xml
│   ├── jetty-bio.xml
│   ├── jetty.conf
│   ├── jetty-contexts.xml
│   ├── jetty-debug.xml
│   ├── jetty-deploy.xml
│   ├── jetty-fileserver.xml
│   ├── jetty-ipaccess.xml
│   ├── jetty-jmx.xml
│   ├── jetty-logging.xml
│   ├── jetty-monitor.xml
│   ├── jetty-overlay.xml
│   ├── jetty-plus.xml
│   ├── jetty-policy.xml
│   ├── jetty-proxy.xml
│   ├── jetty-requestlog.xml
│   ├── jetty-rewrite.xml
│   ├── jetty-spdy-proxy.xml
│   ├── jetty-spdy.xml
│   ├── jetty-ssl.xml
│   ├── jetty-started.xml
│   ├── jetty-stats.xml
│   ├── jetty-testrealm.xml
│   ├── jetty-webapps.xml
│   ├── jetty-xinetd.xml
│   ├── jetty.xml (主要配置文件,默认参数,端口8080)
│   ├── keystore
│   ├── krb5.ini
│   ├── README.spnego
│   ├── realm.properties
│   ├── spnego.conf
│   ├── spnego.properties
│   └── webdefault.xml
├── etc2(被bin/jetty2.sh使用)
│   ├── jdbcRealm.properties
│   ├── jetty-ajp.xml
│   ├── jetty-annotations.xml
│   ├── jetty-bio-ssl.xml
│   ├── jetty-bio.xml
│   ├── jetty.conf(改成 etc2/jetty-logging.xml    /   etc2/jetty-started.xml)
│   ├── jetty-contexts.xml(修改default="." />/contexts2</Set> )
│   ├── jetty-debug.xml
│   ├── jetty-deploy.xml
│   ├── jetty-fileserver.xml
│   ├── jetty-ipaccess.xml
│   ├── jetty-jmx.xml
│   ├── jetty-logging.xml
│   ├── jetty-monitor.xml
│   ├── jetty-overlay.xml
│   ├── jetty-plus.xml
│   ├── jetty-policy.xml
│   ├── jetty-proxy.xml
│   ├── jetty-requestlog.xml
│   ├── jetty-rewrite.xml
│   ├── jetty-spdy-proxy.xml
│   ├── jetty-spdy.xml
│   ├── jetty-ssl.xml
│   ├── jetty-started.xml (改成  <Arg><SystemProperty name="jetty2.state" default="./jetty2.state"/></Arg> )
│   ├── jetty-stats.xml
│   ├── jetty-testrealm.xml
│   ├── jetty-webapps.xml (改成 default="." />/webapps2</Set>    default="."/>/etc2/webdefault.xml</Set>   default="." />/contexts2</Set>  )
│   ├── jetty-xinetd.xml
│   ├── jetty.xml (主要配置文件,默认参数,仅修改端口为9090)
│   ├── keystore
│   ├── krb5.ini
│   ├── README.spnego
│   ├── realm.properties
│   ├── spnego.conf
│   ├── spnego.properties
│   └── webdefault.xml
├── start2.ini(start2.ini里面内容的配置文件路径指向etc2目录下,被bin/jetty2.sh使用)
├── start2.jar (默认版本的副本)以为多复制一个副本可以解决“问题1”,结果失败了)
├── start.ini (默认版本)
├── start.jar (默认版本)
├── VERSION.txt
├── webapps (默认版本)
│   ├── spdy.war
│   └── test.war
└── webapps2 (默认版本的副本)
    ├── spdy.war
    └── test.war


二、组合启动时候的测试结果:
A) start.ini 和 etc/jetty.xml跑的是  8080端口

B) start2.ini 和 etc2/jetty.xml跑的是 9090端口


#######分割线########

测试操作1结果 失败了:

A) #java -jar start.jar --dry-run jetty.port=8080   -ini=start.ini   -Djetty.home=/usr/local/jetty_v8/  jetty.exttwars=ture -deamon    etc/jetty.xml etc/jetty-webapps.xml  etc/jetty-logging.xml  etc/jetty-jmx.xml

[test@-test1 jetty-distribution-8.1.17.v20150415]# java -jar start.jar --dry-run jetty.port=8080   -ini=start.ini   -Djetty.home=/usr/local/jetty_v8/  jetty.exttwars=ture -deamon   /usr/local/jetty_v8/etc/jetty.xml /usr/local/jetty_v8/etc/jetty-webapps.xml   /usr/local/jetty_v8/etc/jetty-logging.xml  /usr/local/jetty_v8/etc/jetty-jmx.xml
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/jre/bin/java -ini=start.ini -deamon -Djetty.home=/usr/local/jetty_v8 -Djetty.home=/usr/local/jetty_v8 -cp /usr/local/jetty_v8/lib/jetty-xml-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/servlet-api-3.0.jar:/usr/local/jetty_v8/lib/jetty-http-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-continuation-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-server-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-security-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-servlet-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-webapp-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-deploy-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-servlets-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-annotations-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/annotations/javax.annotation-1.1.0.v201108011116.jar:/usr/local/jetty_v8/lib/annotations/org.objectweb.asm-3.1.0.v200803061910.jar:/usr/local/jetty_v8/lib/jetty-jmx-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jsp/com.sun.el-2.2.0.v201108011116.jar:/usr/local/jetty_v8/lib/jsp/javax.el-2.2.0.v201108011116.jar:/usr/local/jetty_v8/lib/jsp/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar:/usr/local/jetty_v8/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar:/usr/local/jetty_v8/lib/jsp/org.apache.jasper.glassfish-2.2.2.v201112011158.jar:/usr/local/jetty_v8/lib/jsp/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar:/usr/local/jetty_v8/lib/jsp/org.eclipse.jdt.core-3.7.1.jar:/usr/local/jetty_v8/lib/jetty-jndi-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-plus-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jndi/javax.activation-1.1.0.v201105071233.jar:/usr/local/jetty_v8/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar:/usr/local/jetty_v8/resources:/usr/local/jetty_v8/lib/jetty-websocket-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-util-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-io-8.1.17.v20150415.jar org.eclipse.jetty.xml.XmlConfiguration /tmp/start7080917710087767391.properties /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty-annotations.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty-deploy.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty-webapps.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty-contexts.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty-testrealm.xml /usr/local/jetty_v8/etc/jetty.xml /usr/local/jetty_v8/etc/jetty-webapps.xml /usr/local/jetty_v8/etc/jetty-logging.xml /usr/local/jetty_v8/etc/jetty-jmx.xml

去了 --dry-run  并启动
[test@-test1 jetty-distribution-8.1.17.v20150415]# java -jar start.jar  jetty.port=8080   -ini=start.ini   -Djetty.home=/usr/local/jetty_v8/  jetty.exttwars=ture -deamon   /usr/local/jetty_v8/etc/jetty.xml /usr/local/jetty_v8/etc/jetty-webapps.xml   /usr/local/jetty_v8/etc/jetty-logging.xml  /usr/local/jetty_v8/etc/jetty-jmx.xml          
WARNING: System properties and/or JVM args set.  Consider using --dry-run or --exec
2015-09-29 17:13:54.554:INFO::Redirecting stderr/stdout to /usr/local/jetty-distribution-8.1.17.v20150415/logs/2015_09_29.stderrout.log

结果是无进程、无在/var/run/生成 pid ,端口更别说了



B) #java -jar start.jar --dry-run jetty.port=9090   -ini=start2.ini   -Djetty.home=/usr/local/jetty_v8/  jetty.exttwars=ture -deamon     etc2/jetty.xml etc2/jetty-webapps.xml   etc2/jetty-logging.xml   etc2/jetty-jmx.xml

[test@-test1 jetty-distribution-8.1.17.v20150415]# java -jar start.jar --dry-run jetty.port=9090   -ini=start2.ini   -Djetty.home=/usr/local/jetty_v8/  jetty.exttwars=ture -deamon   etc2/jetty.xml etc2/jetty-webapps.xml  etc2/jetty-logging.xml                  /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/jre/bin/java -ini=start2.ini -deamon -Djetty.home=/usr/local/jetty_v8 -Djetty.home=/usr/local/jetty_v8 -cp /usr/local/jetty_v8/lib/jetty-xml-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/servlet-api-3.0.jar:/usr/local/jetty_v8/lib/jetty-http-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-continuation-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-server-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-security-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-servlet-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-webapp-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-deploy-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-servlets-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-annotations-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/annotations/javax.annotation-1.1.0.v201108011116.jar:/usr/local/jetty_v8/lib/annotations/org.objectweb.asm-3.1.0.v200803061910.jar:/usr/local/jetty_v8/lib/jetty-jmx-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jsp/com.sun.el-2.2.0.v201108011116.jar:/usr/local/jetty_v8/lib/jsp/javax.el-2.2.0.v201108011116.jar:/usr/local/jetty_v8/lib/jsp/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar:/usr/local/jetty_v8/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar:/usr/local/jetty_v8/lib/jsp/org.apache.jasper.glassfish-2.2.2.v201112011158.jar:/usr/local/jetty_v8/lib/jsp/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar:/usr/local/jetty_v8/lib/jsp/org.eclipse.jdt.core-3.7.1.jar:/usr/local/jetty_v8/lib/jetty-jndi-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-plus-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jndi/javax.activation-1.1.0.v201105071233.jar:/usr/local/jetty_v8/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar:/usr/local/jetty_v8/resources:/usr/local/jetty_v8/lib/jetty-websocket-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-util-8.1.17.v20150415.jar:/usr/local/jetty_v8/lib/jetty-io-8.1.17.v20150415.jar org.eclipse.jetty.xml.XmlConfiguration /tmp/start7904112133767732320.properties /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty-annotations.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty-deploy.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty-webapps.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty-contexts.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc/jetty-testrealm.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc2/jetty.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc2/jetty-webapps.xml /usr/local/jetty-distribution-8.1.17.v20150415/etc2/jetty-logging.xml

去了 --dry-run  并启动
[test@-test1 jetty-distribution-8.1.17.v20150415]# java -jar start.jar  jetty.port=9090   -ini=start2.ini   -Djetty.home=/usr/local/jetty_v8/  jetty.exttwars=ture -deamon   etc2/jetty.xml etc2/jetty-webapps.xml  etc2/jetty-logging.xml           
WARNING: System properties and/or JVM args set.  Consider using --dry-run or --exec
2015-09-29 17:18:50.160:INFO::Redirecting stderr/stdout to /usr/local/jetty-distribution-8.1.17.v20150415/logs/2015_09_29.stderrout.log

一样结果是无进程、无在/var/run/生成 pid ,端口更别说了,但这里明显是指定了 -ini=start2.ini 参数,但依旧还重复读取了etc/jetty.xml配置文件;


#######分割线########

测试操作2:拷贝jetty.sh为jetty2.sh改成里面的start.ini 都改成 start2.ini,并将jetty2.sh 和 start2.ini里面内容的配置文件路径指向etc2目录下;

A) #/usr/local/jetty-distribution-8.1.17.v20150415/bin/jetty.sh start

[test@-test1 jetty-distribution-8.1.17.v20150415]# /usr/local/jetty-distribution-8.1.17.v20150415/bin/jetty.sh start
Starting Jetty: 2015-09-29 16:58:36.160:INFO::Redirecting stderr/stdout to /usr/local/jetty-distribution-8.1.17.v20150415/logs/2015_09_29.stderrout.log
OK 2015年 09月 29日 星期二 16:58:39 CST

查看端口和pid都出来了
[test@-test1 tool]# netstat -lntp
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name        
tcp        0      0 :::8080                     :::*                        LISTEN      3467/java           


[test@-test1 tool]# cat /var/run/jetty.pid
3467

    ##jetty.sh 的进程pid对应代码段
    #####################################################
    # Find a location for the pid file
    #####################################################
    if [ -z "$JETTY_RUN" ]
    then
      JETTY_RUN=$(findDirectory -w /var/run /usr/var/run $JETTY_HOME /tmp)
    fi

    #####################################################
    # Find a pid and state file
    #####################################################
    if [ -z "$JETTY_PID" ]
    then
      JETTY_PID="$JETTY_RUN/jetty.pid"
    fi

    if [ -z "$JETTY_STATE" ]
    then
      JETTY_STATE=$JETTY_HOME/jetty.state
    fi
    JAVA_OPTIONS+=("-Djetty.state=$JETTY_STATE")
    rm -f $JETTY_STATE

    ##################################################

通过浏览器访问http://192.168.35.100:8080/ 也显示jetty自带的test.war包的默认页面,so第一个端口正常启动了,接着启动9090试试~~

B) #/usr/local/jetty-distribution-8.1.17.v20150415/bin/jetty2.sh start
[test@-test1 jetty-distribution-8.1.17.v20150415]# /usr/local/jetty-distribution-8.1.17.v20150415/bin/jetty2.sh start
Starting Jetty: 2015-09-29 17:03:23.901:INFO::Redirecting stderr/stdout to /usr/local/jetty-distribution-8.1.17.v20150415/logs/2015_09_29.stderrout.log
FAILED 2015年 09月 29日 星期二 17:03:27 CST

[test@-test1 tool]# ll /var/run/jetty*
-rw-r--r--. 1 root root 5 9月  29 17:03 /var/run/jetty2.pid
-rw-r--r--. 1 root root 5 9月  29 16:58 /var/run/jetty.pid

[test@-test1 tool]# cat /var/run/jetty2.pid
3575

[test@-test1 tool]# netstat -lntp | grep java
tcp        0      0 :::8080                     :::*                        LISTEN      3467/java  


这里的/var/run/jetty2.pid属于jetty2.sh的,对应的pid是3575(生成了进程pid,是不是闪现了?),
但监听8080端口的是jetty.sh 的 jetty.pid 的 3467 。。。。。

jetty2.sh 对应的配置文件 etc2/jetty.xml 显然 没起效,事关端口9090 没看见,ps aux | grep java 也没看见  jetty2.sh 进程 ,显然进程没跑步起来。。。


继续分析jetty2.sh进程为什么会没起来

[test@-test1 jetty-distribution-8.1.17.v20150415]# sh -x /usr/local/jetty-distribution-8.1.17.v20150415/bin/jetty2.sh start
+ JETTY_HOME=/usr/local/jetty-distribution-8.1.17.v20150415
+ ‘[‘ 1 -gt 0 ‘]‘
+ CONFIGS=()
+ NO_START=0
+ DEBUG=0
+ [[ start = -* ]]
+ ACTION=start
+ shift
+ ETC=/etc2
+ ‘[‘ 0 ‘!=‘ 0 ‘]‘
+ for CONFIG in ‘$ETC/default/jetty{,8}‘ ‘$HOME/.jettyrc‘
+ ‘[‘ -f /etc2/default/jetty ‘]‘
+ for CONFIG in ‘$ETC/default/jetty{,8}‘ ‘$HOME/.jettyrc‘
+ ‘[‘ -f /etc2/default/jetty8 ‘]‘
+ for CONFIG in ‘$ETC/default/jetty{,8}‘ ‘$HOME/.jettyrc‘
+ ‘[‘ -f /root/.jettyrc ‘]‘
+ TMPDIR=/tmp
+ JETTY_INSTALL_TRACE_FILE=etc2/jetty.xml
+ ‘[‘ -z /usr/local/jetty-distribution-8.1.17.v20150415 ‘]‘
+ ‘[‘ -z /usr/local/jetty-distribution-8.1.17.v20150415 ‘]‘
+ ‘[‘ -z /usr/local/jetty-distribution-8.1.17.v20150415 ‘]‘
+ cd /usr/local/jetty-distribution-8.1.17.v20150415
+ JETTY_HOME=/usr/local/jetty-distribution-8.1.17.v20150415
+ ‘[‘ ‘!‘ -r /usr/local/jetty-distribution-8.1.17.v20150415/etc2/jetty.xml ‘]‘
+ ‘[‘ -z ‘‘ ‘]‘
+ ‘[‘ -f /etc2/jetty.conf ‘]‘
+ ‘[‘ -f /usr/local/jetty-distribution-8.1.17.v20150415/etc2/jetty.conf ‘]‘
+ JETTY_CONF=/usr/local/jetty-distribution-8.1.17.v20150415/etc2/jetty.conf
+ ‘[‘ -z ‘‘ ‘]‘
+ ‘[‘ -f /usr/local/jetty-distribution-8.1.17.v20150415/etc2/jetty.conf ‘]‘
+ ‘[‘ -r /usr/local/jetty-distribution-8.1.17.v20150415/etc2/jetty.conf ‘]‘
+ read -r CONF
+ expr ‘# ========================================================‘ : ‘#‘
+ continue
+ read -r CONF
+ expr ‘# jetty.conf Configuration for jetty.sh script‘ : ‘#‘
+ continue
+ read -r CONF
+ expr ‘# --------------------------------------------------------‘ : ‘#‘
+ continue
+ read -r CONF
+ expr ‘# This file is used by the jetty.sh script to provide‘ : ‘#‘
+ continue
+ read -r CONF
+ expr ‘# extra configuration arguments for the start.jar command‘ : ‘#‘
+ continue
+ read -r CONF
+ expr ‘# created by that script.‘ : ‘#‘
+ continue
+ read -r CONF
+ expr ‘#‘ : ‘#‘
+ continue
+ read -r CONF
+ expr ‘# Each line in this file becomes an arguement to start.jar‘ : ‘#‘
+ continue
+ read -r CONF
+ expr ‘# in addition to those found in the start.ini file‘ : ‘#‘
+ continue
+ read -r CONF
+ expr ‘# =======================================================‘ : ‘#‘
+ continue
+ read -r CONF
+ expr etc2/jetty-logging.xml : ‘#‘
+ ‘[‘ -d etc2/jetty-logging.xml ‘]‘
+ CONFIGS+=("$CONF")
+ read -r CONF
+ expr etc2/jetty-started.xml : ‘#‘
+ ‘[‘ -d etc2/jetty-started.xml ‘]‘
+ CONFIGS+=("$CONF")
+ read -r CONF
+ ‘[‘ -z ‘‘ ‘]‘
++ findDirectory -w /var/run /usr/var/run /usr/local/jetty-distribution-8.1.17.v20150415 /tmp
++ local L OP=-w
++ shift
++ for L in ‘"$@"‘
++ ‘[‘ -w /var/run ‘]‘
++ printf %s /var/run
++ break
+ JETTY_RUN=/var/run
+ ‘[‘ -z ‘‘ ‘]‘
+ JETTY_PID=/var/run/jetty2.pid
+ ‘[‘ -z ‘‘ ‘]‘
+ JETTY_STATE=/usr/local/jetty-distribution-8.1.17.v20150415/jetty2.state
+ JAVA_OPTIONS+=("-Djetty.state=$JETTY_STATE")
+ rm -f /usr/local/jetty-distribution-8.1.17.v20150415/jetty2.state
+ ‘[‘ -z ‘‘ ‘]‘
++ which java
+ JAVA=/usr/bin/java
+ ‘[‘ -z /usr/bin/java ‘]‘
+ ‘[‘ ‘‘ ‘]‘
+ ‘[‘ ‘‘ ‘]‘
+ case "`uname`" in
++ uname
+ PATH_SEPARATOR=:
+ JAVA_OPTIONS+=("-Djetty.home=$JETTY_HOME" "-Djava.io.tmpdir=$TMPDIR")
+ ‘[‘ -f /usr/local/jetty-distribution-8.1.17.v20150415/etc2/start.config ‘]‘
+ JETTY_START=/usr/local/jetty-distribution-8.1.17.v20150415/start2.jar
+ ‘[‘ ‘!‘ -f /usr/local/jetty-distribution-8.1.17.v20150415/start2.jar ‘]‘
++ dirname /usr/local/jetty-distribution-8.1.17.v20150415/start2.jar
+ START_INI=/usr/local/jetty-distribution-8.1.17.v20150415/start2.ini
+ ‘[‘ -r /usr/local/jetty-distribution-8.1.17.v20150415/start2.ini ‘]‘
+ RUN_ARGS=(${JAVA_OPTIONS[@]} -jar "$JETTY_START" $JETTY_ARGS "${CONFIGS[@]}")
+ RUN_CMD=("$JAVA" ${RUN_ARGS[@]})
+ ((  DEBUG  ))
+ case "$ACTION" in
+ echo -n ‘Starting Jetty: ‘
Starting Jetty: + ((  NO_START  ))
+ ‘[‘ 0 -eq 0 ‘]‘
+ type start-stop-daemon
+ ‘[‘ -f /var/run/jetty2.pid ‘]‘
+ running /var/run/jetty2.pid
++ cat /var/run/jetty2.pid
+ local PID=3575
+ kill -0 3575
+ rm -f /var/run/jetty2.pid
+ ‘[‘ ‘‘ ‘]‘
+ disown 3662
+ echo 3662
+ expr ‘etc2/jetty-logging.xml etc2/jetty-started.xml‘ : ‘.*etc2/jetty-started.xml.*‘
+ /usr/bin/java -Djetty.state=/usr/local/jetty-distribution-8.1.17.v20150415/jetty2.state -Djetty.home=/usr/local/jetty-distribution-8.1.17.v20150415 -Djava.io.tmpdir=/tmp -jar /usr/local/jetty-distribution-8.1.17.v20150415/start2.jar etc2/jetty-logging.xml etc2/jetty-started.xml
+ started /usr/local/jetty-distribution-8.1.17.v20150415/jetty2.state /var/run/jetty2.pid
+ for T in 1 2 3 4 5 6 7 9 10 11 12 13 14 15
+ sleep 4
2015-09-29 17:09:39.700:INFO::Redirecting stderr/stdout to /usr/local/jetty-distribution-8.1.17.v20150415/logs/2015_09_29.stderrout.log
++ grep STARTED /usr/local/jetty-distribution-8.1.17.v20150415/jetty2.state
+ ‘[‘ -z ‘‘ ‘]‘
++ grep STOPPED /usr/local/jetty-distribution-8.1.17.v20150415/jetty2.state
+ ‘[‘ -z ‘‘ ‘]‘
++ grep FAILED /usr/local/jetty-distribution-8.1.17.v20150415/jetty2.state
+ ‘[‘ -z ‘FAILED org.eclipse.jetty.server.Server@20eaf45a‘ ‘]‘
+ return 1
++ date
+ echo ‘FAILED 2015年 09月 29日 星期二 17:09:43 CST‘
FAILED 2015年 09月 29日 星期二 17:09:43 CST
+ exit 0



看了半天 没发现什么不妥.........意味着继续分析了。。。。。。有点怀疑是 那个start.jar的问题。。。然而 出现了上面目录树的 start2.jar副本并重复上述操作,依旧起不来。。。





#######尝试其它 配置文件分离 的 测试尝试 ########
大概是 还是让jetty默认从start.ini加载,只是改start.ini内容(读完etc的配置文件 再读 etc2的配置文件)  和 jetty目录 做了改动,
[test@-test1 jetty-distribution-8.1.17.v20150415]# tree -P 2
.
├── bin
├── contexts
│   └── test.d
├── contexts2
│   └── test.d
├── contexts-available
├── etc
├── etc2
├── webapps
└── webapps
├── contexts
│   └── test.d
├── contexts2
│   └── test.d


[test@-test1 jetty-distribution-8.1.17.v20150415]# cat start.ini
OPTIONS=Server,jsp,jmx,resources,websocket,ext,plus,annotations
####etc####
etc/jetty.xml
etc/jetty-annotations.xml
etc/jetty-deploy.xml
etc/jetty-webapps.xml
etc/jetty-contexts.xml
etc/jetty-testrealm.xml
####etc2####
etc2/jetty.xml(主要配置文件,默认参数,仅修改端口为9090)
etc2/jetty-annotations.xml
etc2/jetty-deploy.xml
etc2/jetty-webapps.xml
etc2/jetty-contexts.xml(改成 default="." />/webapps2</Set>    default="."/>/etc2/webdefault.xml</Set>   default="." />/contexts2</Set>  )
etc2/jetty-testrealm.xml

另jetty-started.xml (改成  <Arg><SystemProperty name="jetty2.state" default="./jetty2.state"/></Arg> )

[test@-test1 jetty-distribution-8.1.17.v20150415]# bin/jetty.sh start
奇迹出现了,8080和9090的端口都出来了

[test@-test1 jetty-distribution-8.1.17.v20150415]# netstat -lntp       
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name         
tcp        0      0 :::9090                     :::*                        LISTEN      6203/java              
tcp        0      0 :::8080                     :::*                        LISTEN      6203/java           

但端口都是一个进程下的~~~(经过反复复现,没错,是同一个进程下的,尼玛白开心了一场~)


问题出在jetty.sh的那段pid代码?


    ##jetty.sh 的进程pid对应代码段
    #####################################################
    # Find a location for the pid file
    #####################################################
    if [ -z "$JETTY_RUN" ]
    then
      JETTY_RUN=$(findDirectory -w /var/run /usr/var/run $JETTY_HOME /tmp)
    fi

    #####################################################
    # Find a pid and state file
    #####################################################
    if [ -z "$JETTY_PID" ]
    then
      JETTY_PID="$JETTY_RUN/jetty.pid"
    fi

    if [ -z "$JETTY_STATE" ]
    then
      JETTY_STATE=$JETTY_HOME/jetty.state
    fi
    JAVA_OPTIONS+=("-Djetty.state=$JETTY_STATE")
    rm -f $JETTY_STATE

    ##################################################


而且发现跑的是同一个webapp应用(war默认是解压/tmp, 明明已经将etc2/jetty-contexts.xml  和 etc2/jetty-webapps.xml 都改了webapp2目录下的 )...    
[test@-test1 jetty-distribution-8.1.17.v20150415]# ll /tmp/ | grep jetty
drwxr-xr-x. 4 root root 4096 9月  30 14:47 jetty-0.0.0.0-8080-spdy.war-_spdy-any-
drwxr-xr-x. 4 root root 4096 9月  30 14:47 jetty-0.0.0.0-8080-test.war-_-any-


显然是只有一个jetty.sh导致的问题...改它水目测好深。。。




#######分割线########


参考资料:
http://www.blogjava.net/xylz/archive/2012/03/28/372923.html  (参考启动过程,里面提及 jar tvf start.jar | grep start.config 包的内容,尝试了解)
http://www.iteye.com/topic/1118395  (测试没通过)
http://wiki.eclipse.org/Jetty/Howto/WebappPerConnector   (测试貌似起不来)
http://www.dumpcache.com/wiki/doku.php?id=about_jetty_1  (这个涉及java 我太弱了  不太懂 没做测试)
http://wiki.eclipse.org/Jetty/Reference/jetty.xml_syntax  (参考官方介绍)




防止目录遍历
vim jetty_8.1.17/etc/webdefault.xml  
      <param-name>dirAllowed</param-name>
      <param-value>false</param-value>(默认是ture)
更改后续重启jetty服务

本文出自 “夜路猫” 博客,请务必保留此出处http://lumao.blog.51cto.com/2917133/1699538

单个jetty 8.1.17跑多个应用的分析过程(分别用独立端口独立进程)

标签:java   linux   jetty   jetty8   jetty8多应用   

原文地址:http://lumao.blog.51cto.com/2917133/1699538

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!