发表于: 2021-04-20 23:44:53
2 1297
一,今天完成的事情
任务二8-11
1,配置好Resin,Tomcat,Jetty的Access.log(不同的WEB服务器的访问日志命名有区别),列出来每一个请求的响应时间,以MS为单位
1-1,启动Resin的时候,一般大家都会发现“watchdog-manager.log”,这个独立进程来启动和监视Resin服务器,为了稳定和安全。
还有jvm-app-0.log,能查看到控制台日志。等log
这里要配置的access.log记录IP、时间、get/set方式、域名后的URL、以及所用的代理
需要配置,输出列出来每一个请求的响应时间(ms)。是Caucho的产品,所以看Caucho的官方网站。
原来是如下图的访问记录
既然设置的是access.log,首先找access。发现有access-log,查找${resin.root}下的conf,根据官网,发现 <cluster>,<cluster-default>和它相关,被列在前列。文件夹下也有cluster-default.xml
有一张表
PATTERN | DESCRIPTION |
---|---|
%b | result content length |
%D | time taken to complete the request in microseconds (since 3.0.16) |
%h | remote IP addr |
%{xxx}i | request header xxx |
%{xxx}o | response header xxx |
%{xxx}c | cookie value xxx |
%{xxx}n | request attribute |
%{xxx}p | request parameter |
%r | request URL |
%s | status code |
%S | requested session id |
%{xxx}t | request date with optional time format string. |
%T | time taken to complete the request in seconds |
%u | remote user |
%U | request URI |
%v | name of the virtual host serving the request |
看到 microseconds,
%D | time taken to complete the request in microseconds (since 3.0.16) |
default access log format
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
在cluster-default.xml中查找access,下图的path的输出目录是我能找到access.log的目录,而且目前的设置也就是上面的设置,和我日志输出的格式能对的上
目前有的如下表说明
ATTRIBUTE | DESCRIPTION | DEFAULT |
---|---|---|
path | Output path for the log entries, see "Log Paths". | required |
path-format | Selects a format for generating path names. The syntax is the same as for archive-format. | optional |
rollover-period | how often to rollover the log. Specify in days (15D), weeks (2W), months (1M), or hours (1h). See "Rollovers". | none |
我打算把这个毫秒的完成Request的说明放在我的日志的最后,所以在format的结尾加上%D
<host-default>
<access-log path="log/access.log"
format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %D'
rollover-period="1W"/>
发送一个请求,查看日志,成功显示时间长度
1-2,配置tomcat access日志
在最后一行加上说好的%D,在最后,然后也就在最后显示
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b %D" />
重新启动生效
发送一个GET请求查看tomcat的log
在localhost_access_log.年月日.txt查看,成功最后多的数字就是响应时间
1-3,配置Jetty access日志
原配置中logs目录中什么也没有
到有start.jar的目录运行java -jar start.jar --add-to-start=requestlog 添加日志模块命令
根据命令的提示,我需要去指定的位置修改指定文件的参数
start.ini。发现requestlog的module被顺利加入了末尾
有若干需要设置,去掉#号
去掉单#前的#,
我把append设置为true
LogLatency设置为true
## Logging directory (relative to $jetty.base)
jetty.requestlog.dir=logs
## File path
jetty.requestlog.filePath=${jetty.requestlog.dir}/yyyy_mm_dd.request.log
## Date format for rollovered files (uses SimpleDateFormat syntax)
jetty.requestlog.filenameDateFormat=yyyy_MM_dd
## How many days to retain old log files
jetty.requestlog.retainDays=90
## Whether to append to existing file
jetty.requestlog.append=true
## Whether to use the extended log output
jetty.requestlog.extended=true
## Whether to log http cookie information
jetty.requestlog.cookies=true
## Timezone of the log entries
jetty.requestlog.timezone=GMT
## Whether to log LogLatency
jetty.requestlog.loglatency=true
重新启动,访问,成功在logs下出现年月日.request.log
并且成功在最后获得响应时间ms
2,任务2要求9,修改Resin的内存配置,给当前的WEB程序分别设置1G内存,512兆内存,32兆内存,测试最小启动的大小。
resin.properties: standard configuration
jvm_args defines the JDK memory and GC parameters to start the Resin process.
jvm启动设置,还是打开Resin 的conf文件夹的cluster-default.xml
找到JVM有关配置。这里是变量,是读取resin.properties 的设置设置服务器。按照描述,服务器启动的内存就是这里的相关配置。
未配置前是缺省。
Arg passed directly to the JVM,就是这里。
有以下常用选项
JVM OPTION PASSED TO RESIN | MEANING |
---|---|
-Xms | initial java heap size |
-Xmx | maximum java heap size |
-Xmn | the size of the heap for the young generation |
-Xss | the stack size for each thread |
现在要求的是启动设置,肯定要用-Xms。限制最大,也可以加上-Xmx
把 jvm_mode : -server也打开
按照# jvm_args : -Xmx2048m -XX:MaxPermSize=256m的设置方式
就是要设置 jvm_args : -Xms32m -Xmx32/512/1024m分别测试。下面就是设置,然后重启服务器
jvm_args : -Xms32m -Xmx32m
无法访问
改变的是Jmv,查看jvm-app-0.log。有ERROR级别的错误,无法运行
jvm_args : -Xms32m -Xmx512m。初始heap32m可以,maximum java heap size 512m Resin可以正常被访问
jvm_args : -Xms32m -Xmx1024m访问正常
此时jmap -heap PID。PID的获取是ps -ef| grep resin。这个得到的最大heap是1024m,和设置相同
初始heap32M可以启动Resin
3,用Top命令查看WEB程序的进程号,用Kill 命令 杀掉WEB进程(注意别用错了,如果杀掉了别人的进程,你大概就会被人杀掉)
3-1,top,实时显示,刷新
配合grep 使用.grep 的多条件查找
直接用top不断更新显示。
ps -ef| grep tomcat
ps -ef| grep jetty
ps -ef| grep resin
top | grep java,我这里就能看到tom cat ,resin的情况。它们的COMMAND都是Java。正在运行的PID都能一一对应T J R这3个web服务器
配合top默认显示的头看。在top刷新的时候,可以q 退出
PID 表示进程 ID。
USER 表示进程所有者的有效用户名称。简单说就是以哪个用户权限启动的进程。比如上图中有两个进程是用户 nick 启动的,还有一个是用户 prometheus 启动的,其它都是 root 用户启动的。
PR 表示进程执行的优先级,PR 的值是以 Linux 内核的视角看到的进程执行的优先级。
NI 从用户视角看到的进程执行优先级。
VIRT 表示进程使用的虚拟内存大小。
RES 表示进程使用的物理内存大小。
SHR 表示进程使用的共享内存的大小。
S 表示进程当前的状态。S 值有下面几种:
D 不可中断的睡眠状态(uninterruptible sleep)
I idle 状态
R 进程在 running 队列中,正在运行或准备运行(running)
S 睡眠状态(sleeping)
T 停止状态(stopped by job control signal)
t 跟踪状态(stopped by debugger during trace)
Z 僵尸状态(zombie)
%CPU 表示进程使用 CPU 的百分比。
%MEM 表示进程使用内存的百分比。
TIME+ 表示进程累计使用的 CPU 时间。
COMMAND 表示运行进程对应的程序。
3-2, kill
kill [OPTIONS] [PID]...
The most commonly used signals are:
1
(HUP
) - Reload a process.9
(KILL
) - Kill a process.15
(TERM
) - Gracefully stop a process.
To get a list of all available signals, invoke the command with the -l
option:
kill -l
用kill -9 tomcat进程号杀
成功
找不到tomcat进程了
4,重新启动服务,用Resin自带的停止脚本,并停止服务,思考Kill命令和停止脚本的区别
4-1,用脚本停止Resin
4-2,重新启动Resin,用kill停止Resin。被kill的肯定不是grep命令自己
成功
4-3,Kill命令和停止脚本的区别
kill需要自己找到PID再使用,停止脚本不需要
停止脚本是按照脚本要求使用,没有做特殊设置,一般要求在bin目录下执行。kill命令在哪里都能根据PID杀掉进程。
停止脚本基本上都是kill -9的封装。按照resin.sh的说明,能找到相应的scripts。有
等等比较规范可以借鉴的scripts代码
二,今天问题:
大厂
三,今天的收获
在Linux上配置3种服务器的日志记录文件。文件名字不同,配置方式Jetty相对不同。
配置Resin,比较Resin的运行内存
top ps jmap grep等Linux命令
kill,自带脚本停止
四,明天的计划:
任务2,条目12-15
评论