一.Java监控命令
1.jps: java进程的查看工具,jps=java ps,类似ps -ef | grep java
jps
jps -lvm
2.jstack:查看java进程信息
查看线程状态Thread.State
jstack -l PID | grep State
异常状态:阻塞状态Blocked 、死亡状态Dead
正常状态:新建状态New、就绪状态Runable、运行状态Running
#进程process:运行起来的程序,占空间和资源,
看进程状态,是否使用了多线程技术,状态有Sl,小写L就是指线程
ps -aux | grep java ,ps -aux | grep nginx nginx的worker process相当于线程,ps -aux | grep mysql
#线程thread:处理用户请求,多线程技术使用 java个数据库
java中线程栈独立,堆共享,每个线程都有自己的Java栈,但它们共享同一个堆内存,java堆用于存储对象实例。
3.jmap 查看jvm信息
jmap PID
#堆heap使用情况
jmap -heap PID
#jvm内存内容导出
jmap -dump:format=b,file=/tmp/java-dmp.bin PID
#内存分析,如windows java jvm内存分析工具,MAT(Eclipse Memory Analyzer Tool )
将导出的java-dmp.bin文件,使用MAT工具打开,file---open heap dump
可能还会结合cat /var/log/messages信息
二.高负载(CPU--->存储)排查流程
#监控告警,发现故障
#通过w命令看load average,假设当达到CPU总数的70%
w
#通过top命令查看%CPU 磁盘IO的wa 按1显示CPU数量 按大P CPU使用率排序
top
#看进程top、htop、ps -aux
ps -aux | grep java
#看磁盘io
iotop
#看服务日志
tailf catalina.out
#进程线程
jsp
jstack -l PID
#导出内存镜像分析
jmap
三.tomcat配置https
方式一:https自签证书
1.生成自签名证书: 使用Java的keytool工具生成一个私钥和自签名证书,创建一个名为keystore.jks的文件
mkdir -p /app/tools/tomcat/conf/cert
cd /app/tools/tomcat/conf/cert
keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 \
-keystore keystore.jks -validity 3600 \
-dname "CN=localhost, OU=Unit, O=Organization, L=City, S=State, C=Country" \
-keypass alibaby -storepass alibaby
警告Warning:
#JKS 密钥库使用专用格式,建议使用下面命令迁移到行业标准格式PKCS12
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12
#输入上面定义的密码alibaby
为啥别名的tomcat的没生成?要手动生成?不确定要不要操作 提示[否]输入Y
keytool -genkey -v -keystore eystore.jks -alias tomcat
-keypass 私钥密码,密码自定义
-storepass 密钥库密码,密码自定义
keystore.jks 文件名自定义
2.导出证书为PEM格式,生成一个cert.crt文件,并将证书转换为PEM格式,生成一个cert.pem文件
keytool -exportcert -alias tomcat -file cert.crt -keystore keystore.jks -storepass alibaby
#转换
openssl x509 -inform DER -in cert.crt -outform PEM -out cert.pem
3.将证书导入到Tomcat信任的证书库
keytool -importcert -alias tomcat -file cert.pem -keystore ./truststore.jks -storepass alibaby -noprompt
4.配置tomcat 配置文件/conf/server.xml
#配置文件修改conf/server.xml,修改后 Connector 80和443
<Connector executor="tomcatThreadPool"
port="80" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
enableLookups="false"
allowTrace="false"
acceptCount="100"
redirectPort="443"
server=" " />
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="500" scheme="https" secure="true"
URIEncoding="UTF-8"
connectionTimeout="20000"
clientAuth="false"
allowTrace="false"
keystoreFile="/app/tools/tomcat/conf/cert/证书域名.pfx" #使用上面生成的话 是keystore.jks
keystorePass="证书密码" #使用上面生成的话 是alibaby
truststoreFile="/app/tools/tomcat/conf/cert/truststore.jks"
truststorePass="alibaby"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
sslProtocol="TLS"
server=" " />
在web.xml文件最底部添加以下内容,实现HTTP自动跳转为HTTPS。
#conf/web.xml配置
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
5.重启tomcat 访问测试https://192.168.77.142
卸载证书,有需要的话先备份,直接rm删除好像也没事。
配置文件/conf/server.xml中找到keystoreFile的路径为/app/tools/tomcat/cert
1.使用keytool工具列出keystore中的条目,找到你要删除的证书的别名
keytool -list -v -keystore /app/tools/tomcat/conf/cert/tomcat
2.删除keystore中的证书条目
keytool -delete -alias tomcat -keystore /app/tools/tomcat/conf/cert/tomcat
3.确认证书已经被删除
keytool -list -v -keystore /app/tools/tomcat/conf/cert/tomocat
4.重启Tomcat以使更改生效
方式二:购买证书后安装,阿里云SSL安装证书指南
1.下载tomcat的https证书
mkdir -p /app/tools/tomcat/conf/cert
cd /app/tools/tomcat/conf/cert
#将购买的证书解压到此目录下,包含一个ssl.证书域名.pfx文件和一个pfx-password.txt文件
2.修改配置文件,实现跳转
#配置文件修改conf/server.xml,修改后 Connector 80和443
<Connector executor="tomcatThreadPool"
port="80" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
enableLookups="false"
allowTrace="false"
acceptCount="100"
redirectPort="443"
server=" " />
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="500" scheme="https" secure="true"
URIEncoding="UTF-8"
connectionTimeout="20000"
clientAuth="false"
allowTrace="false"
keystoreFile="/app/tools/tomcat/conf/cert/证书域名.pfx" #使用上面生成的话 是keystore.jks
keystoreType"PKCS12" #可删除
keystorePass="证书密码" #使用上面生成的话 是alibaby
ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
sslProtocol="TLS"
server=" " />
在web.xml文件最底部添加以下内容,实现HTTP自动跳转为HTTPS。
#conf/web.xml配置
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>