首页 > 其他分享 >LNMT动态⽹站

LNMT动态⽹站

时间:2024-08-26 21:51:23浏览次数:7  
标签:20 tomcat LNMT 线程 0.0 java 动态 root

LNMT动态⽹站

Nginx + Tomcat

Tomcat默认监听在8080端⼝
Tomcat依赖于java

0.环境准备

系统 服务 地址
CentOS7.9 Nginx Proxy 192.168.1.170
CentOS7.9 Tomcat 动态服务器 192.168.1.152

1.安装 jdk

链接: https://pan.baidu.com/s/1rBd5lAIn0Cn-JrgJDy00IQ?pwd=94he 提取码: 94he

192.168.1.152

#上传到 /soft/package/
[root@tomcat-node1-20 package]# pwd
/soft/package/
[root@tomcat-node1-20 package]# ll
-rw------- 1 root root 194151339 4⽉ 28 21:20 jdk-8u231-linux-x64.tar.gz
[root@tomcat-node1-20 package]# tar xf jdk-8u231-linux-x64.tar.gz -C /app
[root@tomcat-node1-20 ~]# cd /app/ && mv jdk1.8.0_231 jdk1.8
[root@tomcat-node1-20 ~]#cat /etc/profile.d/jdk.sh
export JAVA_HOME=/app/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

[root@tomcat-node1-20 ~]# chmod +x /etc/profile.d/jdk.sh
[root@tomcat-node1-20 ~]# source /etc/profile
[root@tomcat-node1-20 ~]# java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

2.安装 tomcat

192.168.1.152

[root@tomcat-node1-20 ~]# mkdir /soft/src -p
[root@tomcat-node1-20 ~]# cd /soft/src
[root@nginx ~]# wget https://mirrors.tuna.tsyuanhua.edu.cn/apache/tomcat/tomcat-9/v9.0.74/bin/apache-tomcat-9.0.74.tar.gz --no-check-certificate

[root@tomcat-node1-20 src]# tar xf apache-tomcat-9.0.74.tar.gz -C /soft
[root@tomcat-node1-20 src]# cd ..
[root@tomcat-node1-20 soft]# mv apache-tomcat-9.0.74/ tomcat-8080
[root@tomcat-node1-20 bin]# /soft/tomcat-8080/bin/startup.sh

3.配置 Nginx proxy 负载均衡

192.168.1.170

[root@nginx nginx]# yum install nginx -y
[root@nginx nginx]# systemctl enable nginx
[root@nginx nginx]# systemctl start
[root@nginx nginx]]# cd /etc/nginx/conf.d/
[root@nginx nginx]]# pwd
/etc/nginx/conf.d
[root@nginx nginx]# cat tomcat.conf

upstream java_prod {
server 192.168.1.152:8080;
}
server {
listen 80;
server_name tomcat.yuansredevsecops.top ;
location / {
proxy_pass http://java_prod;
include proxy_params;
}
}

image-20240826211845980

JVM故障排查思路

JVM 问题排查-性能优化如何排查jvm问题:https://blog.csdn.net/qq_35958391/article/details/124367955

1.jps获取java进程的PID
2.top -H -p PID 查看对应进程的哪个线程占⽤CPU过⾼。
3.jstack pid >> java.txt 导出CPU占⽤⾼进程的线程栈。
4.echo "obase=16;989"|bc 将线程的PID转换为16进制。
5.在第⼆步导出的java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。
6.分析负载⾼的线程栈都是什么业务操作。优化程序并处理问题。

tomcat 性能优化参数

#最⼤线程数
maxThreads="600"
#初始化时创建的线程数
minSpareThreads="100"
#⼀旦创建的线程超过这个值, Tomcat就会关闭,不再需要的socket线程。
maxSpareHtreads="500"
#指定当所有可以使⽤的处理请求的线程数量都被使⽤时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
acceptCount="700" />

实战操作

[root@tomcat ~]# mkdir -p tomcat
[root@tomcat ~]# cd tomcat
[root@tomcat tomcat]# pwd
/root/tomcat
[root@tomcat tomcat]# jps
48051 Bootstrap
94398 Jps
[root@tomcat tomcat]# top -Hp 48051
top - 11:41:24 up 23 days, 9:55, 2 users, load average: 0.00, 0.01, 0.05
Threads: 33 total, 0 runnyuan, 33 sleepyuan, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 7990056 total, 5457288 free, 1138616 used, 1394152 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 6158984 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
48051 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.00 java
93862 root 20 0 5677816 155780 13752 S 0.0 1.9 0:01.09 java
93863 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.02 java
93864 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.00 java
93865 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.02 java
93866 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.02 java
93867 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.08 java
93868 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.00 java
93869 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.00 java
93870 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.00 java
93871 root 20 0 5677816 155780 13752 S 0.0 1.9 0:01.07 java
93872 root 20 0 5677816 155780 13752 S 0.0 1.9 0:01.10 java
93873 root 20 0 5677816 155780 13752 S 0.0 1.9 0:01.21 java
93874 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.00 java
93875 root 20 0 5677816 155780 13752 S 0.0 1.9 0:01.12 java
93876 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.03 java
93877 root 20 0 5677816 155780 13752 S 0.0 1.9 0:00.01 java

[root@tomcat tomcat]# jstack 48051 >> java.txt
[root@tomcat tomcat]# echo "obase=16;48051"|bc
BBB3
[root@tomcat tomcat]# egrep -ri "BBB3" java.txt
"main" #1 prio=5 os_prio=0 tid=0x00007fc64c00a000 nid=0xbbb4 runnable [0x00007fc6521d1000]
"main" #1 prio=5 os_prio=0 tid=0x00007fc64c00a000 nid=0xbbb4 runnable [0x00007fc6521d1000]
condition [0x00007f9a7db65000]
java.lang.Thread.State: TIMED_WAITING (parkyuan)
at sun.misc.Unsafe.park(Native Method)
- parkyuan to wait for <0x00000000db8b4110> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Abstra
ctQueuedSynchronizer.java:2078)
at
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadP
oolExecutor.java:1093)
at
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadP
oolExecutor.java:809)
at
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at
org.apache.tomcat.util.threads.TaskThread$WrappyuanRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

这是 Tomcat Web 服务器进程中的⼀个线程,线程名为 Catalina-utility-2。根据堆栈信息,该线程处于
TIMED_WAITING 状态,即等待某个条件,在指定时间过后将会⾃动唤醒。

堆栈信息显示该线程被阻塞在`java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take` ⽅法上,该⽅法是⼀个被调度的线程池队列(DelayedWorkQueue)。该线程进⼊了 Wait(等待)状态并在等待某个任务添加到队列中。

该线程池中可能存在某个任务⽆法完成或其它线程池问题。可以使⽤ jstack 和 JMX 等⽅式,查看线程池的上下⽂以及任务队列中是否存在某些任务在等待执⾏。如果任务等待时间过⻓,可以调整线程池的参数;如果任务本身有问题,则需要对其实现进⾏修复。

jstack

jstack 是 JDK ⾃带的⼀个命令⾏⼯具,可以⽤来打印出⼀个 Java 进程的线程堆栈信息。它可以⾮常⽅便地帮助开发者和运维⼈员分析 Java 进程在运⾏时出现的问题,⽐如死锁、性能瓶颈等。

jstack 可以⽤来查看 Java 进程中所有线程的状态,包括线程ID、线程名称、线程状态、堆栈信息等。根据堆栈信息,可以分析出每个线程正在执⾏的代码,以及线程间的互相依赖关系,从⽽帮助定位问题并进⾏排查和解决。

使⽤ jstack 命令时需要提供⽬标 Java 进程的 ID 或者⽂件描述符。如果不指定任何参数,则默认会将堆栈信息打印到标准输出中,也可以将结果存储到⽂件中进⾏分析。

jstack 命令的语法如下:

jstack [-l] [-m] [-h] [-F] [-v] <pid or core>

其中主要参数的含义如下:

  • -l : 输出关于锁的附加信息
  • -m : 如果调⽤本地⽅法,则显示C/C++堆栈信息
  • -h : 帮助信息
  • -F : 当正常输出阻塞时,强制输出线程的堆栈信息
  • -v : 输出所有JVM相关信息

可以通过官⽅⽂档或者命令⾏输⼊ jstack -h 获取更详细的使⽤说明。

标签:20,tomcat,LNMT,线程,0.0,java,动态,root
From: https://www.cnblogs.com/zgw03/p/18381625

相关文章

  • LNMP动态⽹站
    LNMP动态⽹站安装LNMP架构yum安装nginx1.24.0php7.2Mriadb5.71.安装Nginx//1.使⽤Nginx官⽅提供的rpm包[root@nginx~]#cat/etc/yum.repos.d/nginx.repo[nginx]name=nginxrepobaseurl=http://nginx.org/packages/centos/7/$basearch/gpgcheck=0enabled=1//2.......
  • 动态dp——P8820 [CSP-S 2022] 数据传输 题解
    P8820[CSP-S2022]数据传输可怜的cnblog被(昨天DDos+今天CC)攻击了(望周知!),只好先发在CSDN题面:题目描述小C正在设计计算机网络中的路由系统。测试用的网络总共有nn......
  • Request processing failed:MyBatisSystemException 黑马web开发课程P152中可能出现的
    该异常的最后一句,通过翻译,大概是:   [dispatcherServlet]:servlet.service()forservlet[dispatcherServlet]在路径[]的上下文中抛出异常[请求处理失败:MyBatisSystemException]    经过对代码的检查,发现controller,sevice,dao层业务逻辑都没有问题dao层的map......
  • java在项目中实现个性化定制的数据可视化图表———静态,动态获取数据
    一、Echarts介绍ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。ECharts最初由百度团队开源,并于2018年初捐赠给Apache基金会,成为ASF孵化级项目。2021年1月26日晚,Apache基金会官方宣布ECharts项目正式毕业。1月28日,EChar......
  • 在 C/C++ 中使用 MY_API 宏封装动态库:一种高效的跨平台接口实现方法
    目录1.背景介绍2.MY_API宏的定义3.使用MY_API宏封装动态库4.编译和使用动态库5.结论在现代软件开发中,封装动态库(DynamicLinkLibrary,DLL)以提供可复用的功能模块已经成为一种常见的实践。然而,在开发跨平台库时,由于不同操作系统对于动态库的导出和导入机制有......
  • 如何编译FFTW3库:静态库与动态库的编译指南
    目录1.下载并解压FFTW3库2.配置编译选项3.编译并安装库4.验证编译结果5.在项目中使用FFTW3库6.总结FFTW3(FastestFourierTransformintheWest)是一个广泛使用的高性能傅里叶变换库。它支持多种优化,适用于多线程计算和SIMD指令,是处理大规模数据傅里叶变换的理......
  • Vue动态路径参数
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><......
  • vue element-ui表格table 表格动态 添加行、删除行、添加列、删除列 自定义表头
         vuetable表格动态添加行、删除行、添加列、删除列自定义表头; 增加一行、删除一行、添加一列、删除一列;每行带输入框input代码1、HTML部分:<template><divclass="app-container"><el-table:data="tableData"borderstyle="width:600px;margin-to......
  • 10、Flink动态表之 DataStream 上的关系查询详解
    a)DataStream上的关系查询下表比较了传统的关系代数和流处理与输入数据、执行和输出结果的关系。关系代数/SQL流处理关系(或表)是有界(多)元组集合。流是一个无限元组序列。对批数据(例如关系数据库中的表)执行的查询可以访问完整的输入数据。流式查询在启动时不能访问......
  • 【VUE声明式导航跳转如何传参】router-link查询参数传参&动态路由传参
    VUE声明式导航跳转如何传参文章目录VUE声明式导航跳转如何传参前言一、查询参数传参语法实现步骤1.实现【首页】和【搜索页】的基础点击功能2.实现【首页】向【搜索页】跳转时的传参功能JS中如何获取传值二、动态路由传参语法实现步骤1.实现首页和搜索页的基础功能2.......