一.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

tomcat相关概念与部署(续3)---java命令故障排查 配置https证书_tomcat

可能还会结合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>