设为首页 收藏本站
查看: 618|回复: 0

[经验分享] centos7安装配置jetty

[复制链接]

尚未签到

发表于 2018-4-28 09:11:09 | 显示全部楼层 |阅读模式
  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即可解决

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-452965-1-1.html 上篇帖子: 【CentOS】firewall-cmd 下篇帖子: Centos6.0/7.0 epel 源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表