JVM虚拟机
常用参数
-XX:+PrintGC #开启gc日志
-XX:+PrintGCDetails #打印gc日志的详细信息
-XX:+PrintGCTimeStamps #打印gc日志的时间戳
-Xloggc:filename #gc日志的路径与名字
Ruby
在这里GC 日志格式支持 %p 和 %t 两个参数:
%p 将会被替换为对应的进程 PID
%t 将会被替代为时间字符串,格式为: YYYY-MM-DD_HH-MM-SS
Perl
开启gc日志
-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/logs/gc-%t.log"
Ruby
配置JAVA虚拟机的堆空间
1.设置java堆空间:两个值默认为物理内存64/1
-Xms:初始堆大小
-Xmx:最大堆大小
# 实际生产环境中, 我们通常将初始化堆(-Xms) 和 最大堆(-Xmx) 设置为一样大不超过物理内存的一半。以避免程序频繁的申请堆空间。
[root@qfedu.com bin]# vim catalina.sh 添加
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/logs/gc-%t.log"
[root@qfedu.com ~]# mkdir /data0/logs/ -p #创建gc日志存放路径
2.重启tomcat
Makefile
JVM 运维实用排障工具
jdk安装
wget https://cloud.7boe.top/d/HKOSS/%E8%BD%AF%E4%BB%B6%E5%8C%85/jdk-8u321-linux-x64.tar.gz?sign=clICrDwnwWb9pMcbmSGK9-7Dke49AcKux6hLkaGKELs=:0 -O jdk.gz
Perl
压缩出来
tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/
Bash
环境变量
vim /etc/profile
Bash
写入
JAVA_HOME=/usr/local/java #指定java安装目录
PATH=$JAVA_HOME/bin:$PATH #用于指定java系统查找命令的路径
export JAVA_HOME PATH #类的路径,在编译运行java程序时,如果有调用到其他类的时候,在classpath中寻找需要的类。
Bash
jps
用来查看Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程
常用参数如下:
-v:输出传给jvm的参数
注意: 使用jps 时的运行账户要和JVM 虚拟机启动的账户一致。若启动JVM虚拟机是运行的账户为www,那使用jps指令时,也要使用www 用户去指定。 sudo -u www jps
Makefile
Example
#查看已经运行的JVM 进程的实际启动参数
[root@java-tomcat1 ~]# jps -v
58154 Jps -Denv.class.path=.:/usr/local/java/lib:/usr/local/java/jre/lib:/usr/local/java/lib/tools.jar -Dapplication.home=/usr/local/java -Xms8m
58015 Bootstrap -Djava.util.logging.config.file=/data/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/data/application/tomcat -Dcatalina.home=/data/application/tomcat -Djava.io.tmpdir=/data/application/tomcat/temp
Perl
jstack
jstack用于打印出给定的java进程ID或远程调试服务的Java堆栈信息。此信息通常在运维的过程中被保存起来(保存故障现场),以供RD们去分析故障。
常用参数如下:
jstack <pid>
jstack [-F] <pid> //当'jstack [-l] pid'没有响应的时候强制打印栈信息
XML
Example
jstack -F 38360 > /tmp/jstack.log
JavaScript
jmap
可以查看JVM堆内存使用情况
# jmap -heap pid
[root@qfedu.com ~]# jmap -heap 1414
Attaching to process ID 1414, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.271-b09
using thread-local object allocation.
Parallel GC with 2 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 520093696 (496.0MB)
NewSize = 11010048 (10.5MB)
MaxNewSize = 173015040 (165.0MB)
OldSize = 22544384 (21.5MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 166723584 (159.0MB)
used = 52566128 (50.13096618652344MB)
free = 114157456 (108.86903381347656MB)
31.5289095512726% used
C#
Tomcat部署
下载
wget https://cloud.7boe.top/d/HKOSS/%E8%BD%AF%E4%BB%B6%E5%8C%85/apache-tomcat-9.0.83.zip?sign=fHosBJ5zXERmfI5Kn5QbfwUv_TUZikqAHpvDs1BhqNc=:0 -O tomcat9.zip
Perl
解压出来
tar zxvf tomcat9.zip
Python
给权限
chmod +x tomcat9/bin/catalina.sh
Bash
启动
tomcat9/bin/startup.sh
Bash
Tomcat目录介绍
.
├── bin #存放tomcat的管理脚本
├── BUILDING.txt
├── conf #tomcat的配置文件
├── CONTRIBUTING.md
├── lib #web应用调用的jar包存放路径
├── LICENSE
├── logs #tomcat日志存放目录,catalin.out日志为只要输出日志
├── NOTICE
├── README.md
├── RELEASE-NOTES
├── RUNNING.txt
├── temp #存放临时文件
├── webapps #默认网站发布目录
└── work #存放编译生产的.java与.class文件
Python
网站默认目录
├── docs #tomcat的帮助文档
├── examples #web应用实例
├── host-manager #主机管理
├── manager #登录管理
└── ROOT #默认站点根目录
Bash
配置文件
.
├── Catalina
├── catalina.policy
├── catalina.properties
├── context.xml
├── logging.properties
├── server.xml # tomcat 主配置文件
├── server.xml.bak
├── server.xml.bak2
├── tomcat-users.xml # tomcat 管理用户配置文件
├── tomcat-users.xsd
└── web.xml
Bash
x
tail -f tomcat9/logs/catalina.out
Bash
Tomcat主要参数
port:指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求。
protocol:连接器使用的协议,支持HTTP和AJP。AJP(Apache Jserv Protocol)专用于tomcat与apache建立通信的.
redirectPort:指定服务器正在处理http请求时,资源本身又被设置了必须要https方式访问的重定向的端口号
maxThreads:接收最大请求的并发数
connectionTimeout 指定超时的时间数(以毫秒为单位)
Makefile
host参数
host:表示一个虚拟主机
name:指定主机名
appBase:应用程序基本目录,即存放应用程序的目录.一般为appBase="webapps",相对于CATALINA_HOME而言的,也可以写绝对路径。
unpackWARs:如果为true,则tomcat会自动将WAR文件解压,否则不解压。
autoDeploy:在tomcat启动时,是否自动部署
Tomcat多实例配置
装两个tomcat写入多个个端口
< <Server port="8011" shutdown="SHUTDOWN">
---
> <Server port="8012" shutdown="SHUTDOWN">
YAML
Tomcat安全优化
telnet 管理端口保护(强制)
类别 | 配置内容及说明 | 标准配置 | 备注 |
---|---|---|---|
telnet管理端口保护 | 1.修改默认的8005管理端口为不易猜测的端口(大于1024);2.修改SHUTDOWN指令为其他字符串; | 1.以上配置项的配置内容只是建议配置,可以按照服务实际情况进行合理配置,但要求端口配置在8000~8999之间; |
2、ajp 连接端口保护(推荐)
类别 | 配置内容及说明 | 标准配置 | 备注 |
---|---|---|---|
Ajp 连接端口保护 | 1.修改默认的ajp 8009端口为不易冲突的大于1024端口;2.通过iptables规则限制ajp端口访问的权限仅为线上机器; | <Connector port="8528"protocol="AJP/1.3" /> | 以上配置项的配置内容仅为建议配置,请按照服务实际情况进行合理配置,但要求端口配置在8000~8999之间;;保护此端口的目的在于防止线下的测试流量被mod_jk转发至线上tomcat服务器; |
3、 禁用管理端(强制)
类别 | 配置内容及说明 | 标准配置 | 备注 |
---|---|---|---|
禁用管理端 | 1. 删除默认的{Tomcat安装目录}/conf/tomcat-users.xml文件,重启tomcat后将会自动生成新的文件;2. 删除{Tomcat安装目录}/webapps下默认的所有目录和文件;3.将tomcat 应用根目录配置为tomcat安装目录以外的目录; | <Host name="localhost" appBase="/application/work/webapps" | 对于前段web模块,Tomcat管理端属于tomcat的高危安全隐患,一旦被攻破,黑客通过上传web shell的方式将会直接取得服务器的控制权,后果极其严重; |
4、降权启动(强制)
类别 | 配置内容及说明 | 标准配置 | 备注 |
---|---|---|---|
降权启动 | 1.tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限;2.如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发; | 避免一旦tomcat 服务被入侵,黑客直接获取高级用户权限危害整个server的安全; |
参数详解
<Server port="8527" shutdown=" dangerous">
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" server="webserver"/>
<!-- Define an AJP 1.3 Connector on port 8528 -->
<!--Define an accesslog -->
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %t %r %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false"/>
<Connector port="8528" protocol="AJP/1.3" />
<Context path="" docBase="/home/work/local/tomcat_webapps" debug="0" reloadable="false" crossContext="true"/>
参数解释:
resolveHosts #如果这个值是true的话,tomcat会将这个服务器IP地址通过DNS转换为主机名,如果是false,就直接写服务器IP地址.
%h #这个就是服务器名称了,如果resolveHosts为false的话,这里就是IP地址了
%t #日志和时间,使用通常的Log格式
%r #包含了请求的方法和URI
%s #这个是响应http的状态码
%b #这是发送信息的字节数,不包括http头,如果字节数为0的话,显示为-
%D #处理请求的时间,以毫秒为单位
%l #浏览者进行身份验证时提供的名字
XML
隐藏版本号
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" /> #在日志这里添加最后一句隐藏版本号。
重启tomcat访问查看