发表于: 2019-12-22 20:46:14

4 1334


啥也不说就是干!!!

由于公司接近年底项目特别忙再加上个人的私事,没有时间写任务日报,接下来要抓紧时间赶丢下的进度了

今天完成的事情:

1、部署项目至远程服务器
Resin 部署
下载安装包:resin-4.0.59.tar.gz
上传至 Linux /usr/local/src 目录下:scp -P22 /usr/downloads/resin-4.0.59.tar.gz root@f0t1.top:/usr/local/src
解压并进入安装包:
tar -zxvf resin-4.0.59.tar.gz
cd resin-4.0.59
配置安装路径和 JDK 路径:./configure --prefix=/usr/local/resin --with-java=/usr/local/jdk1.8.0_201
编译并安装 make&make install
查看安装成功
Resin 启动:/etc/init.d/resin start
进入配置文件目录:
cd /usr/local/resin/conf/
配置1:改变端口8080为8088:
编辑配置文件:vim resin.properties
修改app.http :8080 为 app.http :8088
重启:
/etc/init.d/resin stop
Stopping resin: .
/etc/init.d/resin start
Starting resin: .
查看端口号:netstat -lnp |grep java
看到端口号已经改为 8088,浏览器输入:f0t1.top:8088
部署应用,将打包好的 JnshuTask2.war 文件上传至 /ur/local/jnshu 目录中
在resin的conf文件夹下的resin.conf(4.0版本是resin.xml)中,配置路径
<web-app id="/test" document—directory="/usr/local/jnshu/JnshuTask2" archive-path="/usr/local/jnshu/JnshuTask2.war"/>
启动 resin 服务:/etc/init.d/resin start,进入 /usr/local/jnshu 目录下看到 部署的 war 包已经被解压:
Postman 本地测试该接口:
@RequestMapping("student")
@Controller
public class StudentController {
@Resource
   StudentService studentService;
   @RequestMapping(value "/{id}/{name}"method = RequestMethod.GET)
@ResponseBody
   public Student getStudentInfo(@PathVariable Integer id@PathVariable String name) {
Student student = new Student();
       student.setName(name);
       student.setId(id);
       return student;
   }
}
看到 json 结果正常返回:

Jetty 部署

1、下载 Jetty 并安装至远程服务器:https://www.cnblogs.com/freeweb/p/5942972.html

2、启动jetty

将 Jetty 端口号修改为 8088

编辑start.ini   如下,找到这行,修改端口号

  1. ## HTTP port to listen on
  2. jetty.port=8081

在上面图中jetty目录下的start.jar可以用于启动,执行命令: java -jar start.jar 即可启动,这个是在当前命令行启动,如果想在后台启动也可以使用nohup和screen

另一种启动方式是执行: ./bin/jetty.sh start 启动,这个默认会在后台运行 jetty


可以看到 Jetty 已经启动,端口号为 8088,在浏览器中访问:f0t1.top:8088

暂时还没在 webapp/ 目录下部署任何应用。

将 JnshuTask2.war 直接放在 webapps目录下即可,重启jetty

postman 访问接口 :GET /jnshuTask2/student/100002/高世豪

数据返回正常

Tomcat 部署

之前已经安装了 Tomcat 到远程服务器了:sh /usr/local/tomcat_cluster/tomcat1/apache-tomcat-7.0.94/bin/startup.sh

正常启动 tomcat:

部署 war 包:先停止 tomcat 服务,将 JnshuTask2.war 上传至服务器 tomcat /webapps/ 目录下

重启 tomcat,Postman 测试接口,正常返回数据:


2、服务器配置相关

Tomcat 目前应用比较广泛,对 JavaEE 和 Servlet 的支持更加全面,很多特性会直接集成进来。

虽然 Jetty 更轻量级,采用 NIO 在处理 I/O 请求上更占优势,在处理静态资源时,性能较高 ,扩展也更加方便。

然而当支持大规模企业级应用,集群部署时候,Tomcat 还是更优选择。

常用配置

修改端口号

apache-tomcat-7.0.94/conf/server.xml

修改 connector 标签的 port 属性

配置内存大小:

apache-tomcat-7.0.94/bin/catalina.sh 增加:

JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"//位置在cygwin=false前。

Xms 指最小内存,Xmx 指最大内存

配置 Access.log

apache-tomcat-7.0.94/conf/server.xml 

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
   prefix="localhost_access_log" suffix=".txt"
   pattern="%h %l %u %t %r&quot; %s %b" />

//<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
//    prefix="localhost_access_log." suffix=".txt"
//    pattern="%h %l %u %t &quot;%r&quot; [%{postdata}r] %s %{Referer}i %{User-Agent}i %T %b" />

产生的访问日志文件在 apache-tomcat-7.0.94/logs/localhost_access_log.2019-12-22.txt

当做web application性能分析的时候,我们经常会借助Tomcat的访问日志。例如可以列举出所有请求访问耗时最长的,然后对接口进行优化

其中 Pattern 参数含义如下:

%a - 远程IP地址
%A - 本地IP地址
%b - 发送的字节数(Bytes sent), 不包括HTTP headers的字节,如果为0则展示'-'
%B - 发送的字节数(Bytes sent), 不包括HTTP headers的字节
%h - 远程主机名称(如果resolveHosts为false则展示IP)
%H - 请求协议
%l - 远程用户名,始终为'-'(Remote logical username from identd)
%m - 请求的方法(GET, POST等)
%p - 接受请求的本地端口
%q - 查询字符串,如果存在,有一个前置的'?'
%r - 请求的第一行(包括请求方法和请求的URI)
%s - response的HTTP状态码(200,404等)
%S - 用户的session ID
%t - 日期和时间,Common Log Format格式
%u - 被认证的远程用户, 不存在则展示'-'
%U - 请求URL路径
%v - 本地服务名
%D - 处理请求的时间,单位为毫秒
%T - 处理请求的时间,单位为秒
%I - 当前请求的线程名(can compare later with stacktraces)
182.119.1.219 - - [22/Dec/2019:19:57:48 +0800] "GET /JnshuTask2/static/jquery-3.3.1.min.js HTTP/1.1" 400 1093

如果配置了 %T 可以根据处理请求的时间排序:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
   prefix="localhost_access_log." suffix=".txt"
   pattern="%h %l %u %t &quot;%r&quot; [%{postdata}r] %s %{Referer}i %{User-Agent}i %T %b" />

按照倒数第二个字段由大到小显示接口及访问时间:

cat logs/localhost_access_log.2019-12-22.txt | awk '{print $(NF-1)" "$0}' | sort -n -r| awk '{$1="";print $0}'

top 命令:显示或管理执行中的程序

选项:

-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。

top -p 7926

解释:

top - 20:23:33[当前系统时间],
       29 days[系统已经运行了16天],
       4 user[个用户当前登录],
load average: 0.00, 0.00, 0.00[系统负载,即任务队列的平均长度]
Tasks: total[总进程数],
       0 running[正在运行的进程数],
       sleeping[睡眠的进程数],
       0 stopped[停止的进程数],
       0 zombie[冻结进程数],
Cpu(s): 0.0%us[用户空间占用CPU百分比],
       0.0%sy[内核空间占用CPU百分比],
       0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比],
       100.0%id[空闲CPU百分比], 0.0%wa[等待输入输出的CPU时间百分比],
       0.0%hi[],
       0.0%st[],
Mem: 1019852k total[物理内存总量],
       950468k used[使用的物理内存总量],
        69384k free[空闲内存总量],
        103792k buffers[用作内核缓存的内存量]
Swap: 0k total[交换区总量],
       0k used[使用的交换区总量],
       0k free[空闲交换区总量],
        182300k cached[缓冲的交换区总量],

3、自动部署项目脚本编写

1)停止 tomcat 服务

2)备份并删除项目

3)拉取最新代码并执行 mvn clean package 生成最新 war 包

4)复制 war 包至 ${tomcat_home}/webapps/ 目录下

5)重新启动 tomcat 服务

#!/bin/bash
source /etc/profile
tomcatPath=/usr/local/tomcat_cluster/tomcat1/apache-tomcat-7.0.94
backPath=/usr/local/jnshu/workspace/backup
echo =================================
echo 自动化部署脚本启动
echo =================================
#echo 进入/data/interactive
cd /local/jnshu/workspace
echo 开始pull版本
git pull
echo 开始编译文件
mvn clean package -Dmaven.test.skip=true
echo 编译完成
sleep 2 #休眠2s

echo 关闭tomcat服务器
sh service.sh stop
sleep 2 #休眠2s

echo 备份并删除原项目
cp $tomcatPath/webapps/JnshuTask2.war $backPath/JnshuTask2.war.$(date +%Y%m%d)
rm -rf $tomcatPath/webapps/JnshuTask2*

echo 部署新文件
cp target/JnshuTask2.war $tomcatPath/webapps/
sleep 5 #休眠5s

echo 重启服务器
sh service.sh start

执行脚本,完成自动部署

明天计划的事情:

1、Nginx 学习

2、任务二的剩余部分及深度思考
遇到的问题:

暂无
收获:

学习了服务器项目配置及常用的命令,以及部署脚本的编写



返回列表 返回列表
评论

    分享到