发表于: 2021-04-20 23:44:53

2 1301


一,今天完成的事情

任务二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


有一张表

PATTERNDESCRIPTION
%bresult content length
%Dtime taken to complete the request in microseconds (since 3.0.16)
%hremote IP addr
%{xxx}irequest header xxx
%{xxx}oresponse header xxx
%{xxx}ccookie value xxx
%{xxx}nrequest attribute
%{xxx}prequest parameter
%rrequest URL
%sstatus code
%Srequested session id
%{xxx}trequest date with optional time format string.
%Ttime taken to complete the request in seconds
%uremote user
%Urequest URI
%vname of the virtual host serving the request


看到 microseconds,

%Dtime 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的目录,而且目前的设置也就是上面的设置,和我日志输出的格式能对的上

目前有的如下表说明

<access-log> Attributes
ATTRIBUTEDESCRIPTIONDEFAULT
pathOutput path for the log entries, see "Log Paths".required
path-formatSelects a format for generating path names. The syntax is the same as for archive-format.optional
rollover-periodhow 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 &quot;%r&quot; %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 RESINMEANING
-Xmsinitial java heap size
-Xmxmaximum java heap size
-Xmnthe size of the heap for the young generation

-Xssthe 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





返回列表 返回列表
评论

    分享到