yum -y install java-1.7.0-openjdk

wget http://download.eclipse.org/jetty/stable-9/dist/jetty-distribution-9.2.5.v20141112.tar.gz

tar zxvf jetty-distribution-9.2.5.v20141112.tar.gz -C /opt/

mv /opt/jetty-distribution-9.2.5.v20141112/ /opt/jetty

cd /opt/jetty/bin

sh ./jetty.sh start

浏览器http://IP:8080/即可


ln -s /opt/jetty/bin/jetty.sh /etc/init.d/jetty

chkconfig --add jetty

chkconfig --level 345 jetty on

vi /etc/default/jetty

JETTY_HOME=/opt/jetty

JETTY_USER=jetty 重启失败可以更改root试试

JETTY_PORT=8080

JETTY_HOST=50.116.24.78

JETTY_LOGS=/opt/jetty/logs/

TMPDIR=/usr/local/jetty9.1/tmp(这个需要修改)

service jetty start


关于一台服务器部署多个jetty9实例如下(环境基于上面安装状态):

sh ./jetty.sh start

netstat -tunlp查看到两个java端口开启,一个是8888,一个是8443(这种是一个实例,默认状态)

cd /opt/jetty/

mkdir run

cp /var/run/jetty.pid /opt/jetty/run

cp -R /opt/jetty/ /opt/jetty1/

cd /opt/jetty/bin

vi jetty.sh(增加以下几行)

JETTY_HOME=/opt/jetty

JETTY_USER=root

JETTY_PORT=8888

JETTY_RUN=$JETTY_HOME/run

JETTY_LOGS=/opt/jetty/logs/

cd /opt/jetty

vi start.ini(查找关于8443的ssl和https的端口,发现8443端口都注释掉了)

#jetty.port=8080(注释掉,因为本人需要改端口)

cd start.d/

vi 900-demo.ini

etc/jetty-ssl.xml

#etc/jetty-https.xml(最后两个逐个注释测试,注释https就ok,再启动jetty只出现一个端口)

jar -xvf file.war(解压war包)

我的云服务器,先启动了8888和8881端口,然后启动8882端口时发现我的8881端口掉了,机器只能启动两个端口,突然想起jetty配置内存问题,使用top命令启了两个jetty我的内存用完了(默认配置)


报错1:(复制过来的更改端口之后不能启动,启动失败但是端口已开启的解决办法)

cd /opt

cp -R jetty/ jetty4/

cd jetty4/run/

rm jetty.pid

touch jetty.pid


报错2:(更改jetty默认的临时解压文件位置)

cd /jetty4

mkdir work


拓展1:与vsftpd结合使用

cd /etc/vsftpd/user

vi guowang-tm

local_root=/opt/jetty/work/jetty-0.0.0.0-8888-包名字.war-_包名字-any-

write_enable=YES

anon_umask=022

file_open_mode=0777

anon_world_readable_only=NO

anon_mkdir_write_enable=YES

anon_upload_enable=YES

anon_other_write_enable=YES

vi vsftpuser.txt

guowang-tm      (账号)

guowang-tm-passwd  (密码)

db_load -T -t hash -f /etc/vsftpd/user/vsftpuser.txt /etc/vsftpd/user/vsftpuser.db(不需要重启,直接生效)

cd /opt/jetty/work/jetty-0.0.0.0-8888-包名字.war-_包名字-any-

chown -R vsftp.vsftp jsp/ webapp/ ent/

cd /opt/jetty/work

chmod -R 755 jetty-0.0.0.0-8888-包名字.war-_包名字-any-/

chmod 777 jetty-0.0.0.0-8888-包名字.war-_包名字-any-/   (链接FPT测试成功)


拓展2:jetty多实例开发边测试边调试代码,需要jetty的开启关闭和看代码的权限

vi jetty-test.sh(注意修改/opt/jetty-3/bin/jetty.sh里的家目录与脚本一致)

#!/bin/bash

ME=`basename $0`

ArgCount=$#

CMD=$1

KEY=$2

NOWDAY=`date +%Y`_`date +%m`_`date +%d`

WHO=`whoami`

if [ ! $ArgCount -eq 2 ]; then

  echo "    Arg count must be 2"

  echo "        {stop | start | log | logn | logf} {key}"

  echo "        log is cat log file"

  echo "        logn is tail log file last 1000 line"

  echo "        logf is tail -f log file"

  exit

fi

if [ $CMD != "start" -a $CMD != "stop" -a $CMD != "log" -a $CMD != "logf" -a $CMD != "logn" ]; then

  echo "arg 1 must be start or stop or log or logf or logn"

  exit

fi


#XMLFILE="/opt/jetty-$KEY/etc/jetty.xml"

#echo -n "XML file $XMLFILE"

#if [ -f "$XMLFILE" ]; then

#    echo " is exist."

#else

#    echo " is NOT exist!"

#    exit

#fi


#JAVA_HOME=/data/app/java

#CLASSPATH=/data/app/java/lib/dt.jar:/data/app/java/lib/tools.jar

#export JAVA_HOME CLASSPATH

#export LANG=zh_CN.UTF-8


export JETTY_HOME=/opt/jetty-$KEY

export JETTY_RUN=/opt/jetty-$KEY/run

export JETTY_LOGS=/opt/jetty-$KEY/logs


#export JETTY_ARGS=/opt/jetty-$KEY/etc/jetty-logging.xml


export JAVA_OPTIONS='-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:PermSize=64M -XX:MaxPermSize=128M -Xmx512m -DOPTIONS=server'

PIDCOUNT=`ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME | awk '{print $2}' | wc -l`

LOGFILE=`ls -t $JETTY_HOME/logs/*.stderrout.log | awk 'NR==1'`

case $CMD in

        logf)

          tail -f $LOGFILE

        ;;

        logn)

          tail -n1000 $LOGFILE

        ;;

        log)

          more $LOGFILE

        ;;

        start)

          if [ "$PIDCOUNT" -gt 1 -o "$PIDCOUNT" -eq 1 ]; then

              echo "There are too many process :"

              ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME

              exit 1

          fi

          if [ "$PIDCOUNT" -eq 0 ]; then

              echo "Let's start it......"

              /opt/jetty-$KEY/bin/jetty.sh start

              sleep 1

              echo "It's stared"

              exit 0

          fi

        ;;

        stop)

          if [ "$PIDCOUNT" -gt 1 ]; then

              echo "There are too many process :"

              ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME

              exit 1

          fi

          if [ "$PIDCOUNT" -eq 0 ]; then

              echo "It had been down!"

              exit 1

          fi

          if [ "$PIDCOUNT" -eq 1 ]; then

              echo "Let's stop it......"

              PID=`ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME | awk '{print $2}'`

              kill $PID

              echo "Sending STOP ... Waiting ..."

              for i in {60..0}; do

                  PIDCOUNT=`ps -ef | grep "jetty-$KEY" | grep -v 'grep' |  grep -v $ME | awk '{print $2}' | wc -l`

                  if [ "$PIDCOUNT" -eq 1 ]; then

                      echo "It's running yet...$i"

                      sleep 1

                  else

                      echo "$JettyHome has been down"

                      exit

                  fi

              done

              PIDCOUNT=`ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME |  awk '{print $2}' | wc -l`

              if [ "$PIDCOUNT" -eq 1 ]; then

                  PID=`ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME | awk '{print $2}'`

                  kill -9 $PID

                  echo "Force to kill -9 pid:$PID"

                  echo "sleep 5 second"

                  sleep 5

                  echo "$PID has been down"

                  exit

              fi

          fi

        ;;

esac

使用方法:(关联的vsftp里面的目录地址注意修改)

ln -s /opt/shell/jetty-test.sh /usr/bin/jj

开启:jj start 3

关闭:jj stop 3

日志:jj logn 3

照搬的脚本,有些不要的自己注释掉了http://blog.csdn.net/chris_playnow/article/details/7987584


拓展3:(解决jetty占用内存过大)

ps -ef|grep jetty

ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid

' | grep jetty | sort -nrk5

(其中rsz是实际内存,vsz是虚拟内存)

(上面脚本占用内存容易一行被我注释掉了,建议使用)

cd /opt/jetty-3

mv start.d/900-demo.ini start.d/900-demo.ini.backup(注释掉不用,需要功能再加,这是解决日志关于java:....../root/etc/webdefault.xml找不到的错误)

vi start.ini(把前面的注释去掉)(不建议使用)

--exec

-Dsun.rmi.dgc.client.gcInterval=3600000

-Dsun.rmi.dgc.server.gcInterval=3600000  设置客户端和服务端GC启动的时间

-Xmx2000m                      最大缓存空间

-Xmn512m                       新生代大小

-XX:PermSize=512m                 内存永久区初始大小

-XX:MaxPermSize=1024m              最大永久区大小

-XX:+UseConcMarkSweepGC

-XX:+CMSClassUnloadingEnabled         允许CMS清楚持久代


# ps -o sz,rss,vsz 端口号

sz:进程映像所占用的物理页面数量,也就是以物理页面为单位表示的虚拟内存大小
rss:进程当前所占用的物理内存大小,单位为kB
vsz:进程的虚拟内存大小,单位为kB,它等于sz乘于物理页面大小(x86平台通常为4kB)


拓展4:jetty优化

http://www.360doc.com/content/15/0626/10/281812_480764429.shtml


http://os.51cto.com/art/201502/464740.htm



监控jetty运行状态脚本:

monitor.sh

#!/usr/bin/env bash

#当前用户根目录

host_dir=`echo ~`                                   

proc_name="start.jar"   

# 日志文件                        

file_name="/opt/cron.log"                        

pid=0

# 计算进程数

proc_num()                                             

{

    num=`ps -ef | grep $proc_name | grep -v grep | wc -l`

    return $num

}

# 进程号

proc_id()                                              

{

    pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`

}

proc_num

number=$?

# 判断进程是否存在

if [ $number -eq 0 ]                                   

then

    /opt/jetty9/bin/jetty.sh restart    # 重启进程的命令,请相应修改

    proc_id                                         # 获取新进程号

    echo ${pid}, `date` >> $file_name      # 将新进程号和重启时间记录

fi



最近最简安装如下:

yum install java-1.8.0

cp jetty-1.9.0 jetty

cd jetty/bin

vi jetty.sh

JETTY_HOME=/opt/jetty

JETTY_USER=root

JETTY_PORT=8888

JETTY_RUN=$JETTY_HOME/run

JETTY_LOGS=/opt/jetty/logs/

./jetty.sh start(报错)

mkdir run

cp /run/jetty.pid run/

cp /root/jetty.state .

./jetty.sh start(好了)

netstat -tunlp(查看java启动的任然是8080默认端口)

vi start.ini

# Module: http

--module=http

## Connector port to listen on

jetty.http.port=80(把这个8080端口改成80端口即可)


报错1:

[启动报错 bin]# ./jetty.sh start

Starting Jetty: Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/jetty/start/Main : Unsupported major.minor version 52.0

        at java.lang.ClassLoader.defineClass1(Native Method)

        at java.lang.ClassLoader.defineClass(ClassLoader.java:803)

        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)

        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)

        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)

        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)

        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)

        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

FAILED Fri Apr 15 19:28:03 CST 2016

解决1:

yum install java-1.8.0即可解决