文章目录

  • 0. 老男孩思想
  • 1. 系统负载高排查流程
    • 1.1 进程/线程相关命令
      • 1.1.1 jps
      • 1.1.2 jstack
      • 1.1.3 jmap
      • 1.1.4 top -Hp pid
    • 1.2 排查流程图
  • 2. 前后端分离项目
    • 2.1 项目说明
    • 2.2 负载均衡
    • 2.3 数据库配置
      • 2.3.1 安装数据库服务
      • 2.3.2 配置数据库环境
    • 2.4 后端配置
    • 2.5 四层负载均衡配置
    • 2.6 前端配置
      • 2.6.1 nginx子配置文件
      • 2.6.2 配置站点目录
      • 2.6.3 配置本地hosts解析并测试
    • 2.7 七层负载均衡配置
  • 3. 思维导图

0. 老男孩思想

在这里插入图片描述

1. 系统负载高排查流程

1.1 进程/线程相关命令

1.1.1 jps

  • jps:java版的ps命令,查看java进程
    • -lvm:显示详细信息

在这里插入图片描述

1.1.2 jstack

  • jstack:显示java进程的线程信息
    • jstack pid |grep ‘Thread.State’ |awk ‘{print $2}’ |sort |uniq -c:统计指定进程的线程状态数量信息

在这里插入图片描述

1.1.3 jmap

  • jmap:可以导出jvm信息,用jvm分析工具分析
    • jmap -dump:format=b,file=/root/java.hprof pid
  • .hprof:jvm数据文件
  • java内存分析工具:mat;本地需要安装jdk
    • 【MAT-jvm内存镜像分析工具】MemoryAnalyzer-1.8.0.20180604-win32.win32.x86_64.zip 链接: https://pan.baidu.com/s/1ef-sfwRyBxAaGr50a5e_6g?pwd=8ksr 提取码: 8ksr
[root@web03 ~]# jps
1716 Jps
1288 Bootstrap
[root@web03 ~]# jmap -dump:format=b,file=/root/1288.hprof 1288
Dumping heap to /root/1288.hprof ...
Heap dump file created [24942256 bytes in 0.102 secs]
[root@web03 ~]# ll 1288.hprof -h
-rw------- 1 root root 24M  76 20:50 1288.hprof
[root@web03 ~]# file 1288.hprof 
1288.hprof: Java HPROF dump, created Sun Jul  6 12:50:38 2025
# 下载到本地
[root@web03 ~]# sz 1288.hprof 

在这里插入图片描述

  • 捕捉开发人员一起分析jvm情况

1.1.4 top -Hp pid

  • top -Hp pid:显示指定进程的线程信息

在这里插入图片描述

1.2 排查流程图

在这里插入图片描述

2. 前后端分离项目

2.1 项目说明

  • 业务:考试系统
  • 前端:exam-web-前端.zip,直接用nginx部署
  • 后端:jar包+yaml配置文件
  • 数据库:mysql8.0,导入sql文件
  • 老男孩教育-前后端分离项目 链接: https://pan.baidu.com/s/1NDG6kCEXkWtyrBP0Mse9QQ?pwd=knvj 提取码: knvj

在这里插入图片描述

2.2 负载均衡

负载均衡说明举例
七层负载均衡解析http/https等协议,转发请求到API服务器根据url分发请求
四层负载均衡对端口负载均衡nginx根据请求的端口和轮询算法选择后端的服务器

2.3 数据库配置

  • 服务器:db02
  • 服务:mysql8.0

2.3.1 安装数据库服务

# 上传mysql压缩包
[root@db02 ~]# rz  
# 解压到指定目录  
[root@db02 ~]# tar xf mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz -C /app/tools/
# 配置软链接
[root@db02 ~]# cd /app/tools/
[root@db02 /app/tools]# ln -s mysql-8.0.28-linux-glibc2.12-x86_64 mysql
# 安装依赖
[root@db02 /app/tools]# yum install ncurses ncurses-devel libaio-devel openssl openssl-devel -y
……
# 添加mysql虚拟用户
[root@db02 /app/tools]# useradd -s /sbin/nologin -M mysql
# 添加mysql配置文件
[root@db02 /app/tools]# cat /etc/my.cnf
#by oldboy weixin:oldboy0102
[mysqld]
##用户
user=mysql 
##安装目录
basedir=/app/tools/mysql/
##数据目录
datadir=/app/data/3306/
port=3306 
socket=/tmp/mysql.sock [client]
socket=/tmp/mysql.sock# 修改数据目录和配置文件的所有者
[root@db02 /app/tools]# chown -R mysql:mysql /app/data/3306 /etc/my.cnf
[root@db02 /app/tools]# chown -R root:root /app/tools/mysql
# 添加系统环境变量
[root@db02 /app/tools]# export PATH=/app/tools/mysql/bin/:$PATH
[root@db02 /app/tools]# mysql --version
mysql  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)
[root@db02 /app/tools]# echo "PATH=/app/tools/mysql/bin/:$PATH" >> /etc/profile
[root@db02 /app/tools]# source /etc/profile
  • 初始化数据库
mysqld --initialize-insecure --user=mysql --basedir=/app/tools/mysql/ --datadir=/app/data/3306/
echo $?
#########################
--initialize-insecure 以不安全方式初始化,root密码为空,不加这个选项就是安全,创建root随机密码.
--user=mysql 指定mysql的虚拟用户
--basedir=/app/tools/mysql/ 安装目录
--datadir=/app/data/3306/ 指定数据目录
与配置文件中一致.
  • 启动服务
# 复制启动脚本
[root@db02 ~]# cp /app/tools/mysql/support-files/mysql.server /etc/init.d/mysqld
# 给予执行权限
[root@db02 ~]# chmod +x /etc/init.d/mysqld
# 修改脚本中的mysql目录和数据目录
[root@db02 ~]# sed -i '/^basedir=/s#basedir=#basedir=/app/tools/mysql/#g' /etc/init.d/mysqld
[root@db02 ~]# sed -i '/^datadir=/s#datadir=#datadir=/app/data/3306/#g' /etc/init.d/mysqld
# 启动服务
[root@db02 ~]# systemctl start   mysqld.service 
# 查看进程和端口
[root@db02 ~]# ps -ef |grep [m]ysql
root        2036       1  0 07:58 ?        00:00:00 /bin/sh /app/tools/mysql//bin/mysqld_safe --datadir=/app/data/3306/ --pid-file=/app/data/3306//db02.pid
mysql       2202    2036  8 07:58 ?        00:00:00 /app/tools/mysql/bin/mysqld --basedir=/app/tools/mysql/ --datadir=/app/data/3306 --plugin-dir=/app/tools/mysql//lib/plugin --user=mysql --log-error=db02.err --pid-file=/app/data/3306//db02.pid --socket=/tmp/mysql.sock --port=3306
[root@db02 ~]# ss -lntup |grep mysql
tcp     LISTEN   0        128                    *:3306                 *:*      users:(("mysqld",pid=2202,fd=26))      
tcp     LISTEN   0        70                     *:33060                *:*      users:(("mysqld",pid=2202,fd=24)) 

2.3.2 配置数据库环境

# 创建数据库,并指定字符集
create database exam charset utf8mb4;
# 创建用户
# with mysql_native_password 指定密码加密插件. 与之前旧的版本兼容
create user exam@'172.16.1.%' identified with mysql_native_password by '1';
# 授权
grant all on exam.* to exam@'172.16.1.%';
# 导入sql文件
[root@db02 ~]# unzip xzs-sql-v3.9.0.zip 
Archive:  xzs-sql-v3.9.0.zipinflating: xzs-mysql.sql   inflating: xzs-postgresql.sql  
[root@db02 ~]# mysql exam <xzs-mysql.sql 

2.4 后端配置

  • 服务器:web03、web04
  • 服务:jdk、jar包
# 创建目录
[root@web03 ~]# mkdir -p /app/code/exam/backend/
# 上传jar包和配置文件
[root@web03 /app/code/exam/backend]# rz                        
[root@web03 /app/code/exam/backend]# ll
总用量 39844
-rw-r--r-- 1 root root      658  320  2024 application-prod.yml
-rw-r--r-- 1 root root 40541350  222  2023 xzs-3.9.0.jar
# 启动jar包
[root@web03 /app/code/exam/backend]# java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod xzs-3.9.0.jar
……

在这里插入图片描述

  • 浏览器访问

在这里插入图片描述

在这里插入图片描述

2.5 四层负载均衡配置

  • 服务器:lb01、lb02
  • 服务:nginx

在这里插入图片描述

# 查看nginx是否有四层负载均衡的模块
[root@lb01 /etc/nginx]# nginx -V |& grep stream
……
# 配置四层负载均衡
[root@lb01 /etc/nginx]# vim nginx.conf 
[root@lb01 /etc/nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 /etc/nginx]# cat nginx.conf 
……
# 四层负载均衡配置
stream {upstream exam_pools {server 10.0.0.9:8000;#server web04:8000;hash $remote_addr consistent;}log_format basic '$remote_addr [$time_local]''$protocol $status $bytes_sent $bytes_received''$session_time';access_log /var/log/nginx-l4.log basic;server {listen 8000;proxy_pass exam_pools;}
}
# 查看nginx服务监听的端口,有8000端口
[root@lb01 /etc/nginx]# ss -lntup |grep nginx
tcp     LISTEN   0        128              0.0.0.0:443           0.0.0.0:*       users:(("nginx",pid=1404,fd=20),("nginx",pid=1403,fd=20),("nginx",pid=1402,fd=20))
tcp     LISTEN   0        128              0.0.0.0:8000          0.0.0.0:*       users:(("nginx",pid=1404,fd=21),("nginx",pid=1403,fd=21),("nginx",pid=1402,fd=21))
tcp     LISTEN   0        128              0.0.0.0:80            0.0.0.0:*       users:(("nginx",pid=1404,fd=19),("nginx",pid=1403,fd=19),("nginx",pid=1402,fd=19))
  • 浏览器访问

在这里插入图片描述

在这里插入图片描述

2.6 前端配置

  • 服务器:web01、web02
  • 服务:nginx、代码

2.6.1 nginx子配置文件

[root@web02 /etc/nginx/conf.d]# cat exam.conf 
server {listen 80;server_name admin.oldboy.cn; root  /app/code/exam/front/admin/;location / {index index.html;}location /api/ {proxy_pass  http://10.0.0.5:8000;}
}server {listen 80;server_name stu.oldboy.cn; root  /app/code/exam/front/student/;location / {index index.html;}location /api/ {proxy_pass  http://10.0.0.5:8000;}
}

2.6.2 配置站点目录

[root@web02 ~]# mkdir -p /app/code/exam/front/
# 上传前端压缩包
[root@web02 /app/code/exam/front]# ll
总用量 8852
-rw-r--r-- 1 root root 9063890  77 13:29 exam-web-前端.zip
[root@web02 /app/code/exam/front]# unzip exam-web-前端.zip 
[root@web02 /app/code/exam/front]# rm exam-web-前端.zip 
[root@web02 /app/code/exam/front]# ll
总用量 0
drwxr-xr-x 4 root root 34  222  2023 exam-web-前端
[root@web02 /app/code/exam/front]# mv exam-web-前端/* ./
[root@web02 /app/code/exam/front]# ll
总用量 0
drwxr-xr-x 4 root root 70  222  2023 admin
drwxr-xr-x 2 root root  6  77 13:30 exam-web-前端
drwxr-xr-x 3 root root 57  222  2023 student
[root@web02 /app/code/exam/front]# rm exam-web-前端/
文件,目录已经移动到回收站:/recyle/tmp.WyRMLDyDr0
[root@web02 /app/code/exam/front]# ll
总用量 0
drwxr-xr-x 4 root root 70  222  2023 admin
drwxr-xr-x 3 root root 57  222  2023 student

2.6.3 配置本地hosts解析并测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.7 七层负载均衡配置

  • 服务器:lb01、lb02
  • 服务:nginx
[root@lb01 /etc/nginx/conf.d]# cat exam_lb.conf 
upstream exam_l7_pools {#server web:80;server 10.0.0.8:80;
}
server {listen 80;server_name admin.oldboy.cn;location / {proxy_pass http://exam_l7_pools;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-Ip $remote_addr;}
}
server {listen 80;server_name stu.oldboy.cn;location / {proxy_pass http://exam_l7_pools;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-Ip $remote_addr;}
}
  • 测试

在这里插入图片描述

  • 复制到lb02
[root@lb02 /etc/nginx/conf.d]# scp lb01:$PWD/e* ./
……
  • 启动keepalived,再测试
[root@lb01 ~]# systemctl start keepalived.service 
[root@lb01 ~]# hostname -I
10.0.0.5 10.0.0.3 172.16.1.5 
##########################
[root@lb02 /etc/nginx/conf.d]# systemctl start keepalived.service 
[root@lb02 /etc/nginx/conf.d]# hostname -I
10.0.0.6 172.16.1.6 

在这里插入图片描述

3. 思维导图

https://kdocs.cn/join/gpuxq6r?f=101\r\n邀请你加入共享群「老男孩教育Linux运维99期-孙克旭」一起进行文档协作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87951.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87951.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87951.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 牵手EasyExcel:解锁高效数据处理姿势

引言 在日常的 Java 开发中&#xff0c;处理 Excel 文件是一个极为常见的需求。无论是数据的导入导出&#xff0c;还是报表的生成&#xff0c;Excel 都扮演着重要的角色。例如&#xff0c;在企业的财务管理系统中&#xff0c;需要将每月的财务数据导出为 Excel 报表&#xff0…

【ARM AMBA AXI 入门 21 -- AXI partial 访问和 narrow 访问的区别】

文章目录 Overview一、定义区别二、AXI 信号层面对比三、举例说明示例一:Partial Access示例二:Narrow Access四、硬件/系统处理角度五、AXI 总线接口信号举例对比Partial Write 事务:Narrow Write 事务(32-bit Master on 64-bit Bus):六、总结对比表七,软件判断判断 Pa…

使用Ideal创建一个spring boot的helloWorld项目

说明&#xff1a;本篇将介绍如何使用Ideal2024.2.1去创建一个spring boot的helloWorld项目&#xff0c;本篇将包含创建的详细步骤以及spring boot项目的目录结构说明&#xff0c;创建过程中的选项说明等。详细步骤如下&#xff1a;第一步&#xff1a;点击文件——新建——项目&…

国内Ubuntu访问不了github等外网

各位小伙伴们&#xff0c;大家好呀。 大家是不是经常遇到访问不了外网的情况呀。 在Ubuntu中可以这样做。 访问这个网站网站测速-Ping检测-Trace查询-Dig查询-路由跟踪查询-tools.ipip.net&#xff0c; 对于github.com&#xff0c;在这个网站输入github.com&#xff0c;会返…

PDF转换工具,即开即用

在办公室里&#xff0c;这句话被反复验证。每天面对成堆的Word和Excel文件&#xff0c;将它们转换成PDF格式是常有的事。可之前用过的工具&#xff0c;不是一次只能转一个&#xff0c;就是操作繁琐得让人头疼。记得有次赶项目&#xff0c;需要把二十多个文档转成PDF&#xff0c…

2. 你可以说一下 http 版本的发展过程吗

你可以说一下 http 版本的发展过程吗 总结&#xff1a;0.9&#xff1a;只能发送 get&#xff0c;无状态。1.0&#xff1a;新增 post&#xff0c;请求头&#xff0c;状态码&#xff0c;cookie。1.1&#xff1a;新增 put/delete/options/patch&#xff0c;keep-alive&#xff0c…

04-Linux驱动模块的自动加载

概述 上一节&#xff0c;我们讲述了Linux驱动开发的基本的模块代码编写和手动执行模块加载的操作&#xff0c; 这一节&#xff0c;我们讲述嵌入式设备上使用Sysvint引导方式下如何开机自动加载模块的步骤。感兴趣的同学看下使用systemd引导方式的开启自动加载模块的步骤 操作…

【牛客算法】游游的整数切割

文章目录 一、题目介绍1.1 题目链接1.2 题目描述1.3 输入描述1.4 输出描述1.5 示例二、解题思路2.1 核心算法设计2.2 性能优化关键2.3 算法流程图三、解法实现3.1 解法一:基础遍历法3.1.1 初级版本分析3.2 解法二:奇偶预统计法(推荐)3.2.1 优化版本分析四、总结与拓展4.1 关…

笔记本电脑忽亮忽暗问题

关于笔记本电脑忽亮忽暗的问题这个问题困扰了我大半年&#xff0c;最后忽然找到解决方法了---主要的话有三种可能性1.关闭显示器自动调亮的功能2.关闭节能模式自动调亮功能3.调整显卡的功率&#xff0c;关闭自动调亮功能一开始一直都是尝试的第一种方法&#xff0c;没解决。。。…

Qt的顶部工具栏在多个界面使用

Qt的工具栏在多个界面使用1、前言2、创建一个工具栏类2.1 新建一个工具栏类3、提升工具栏类3.1登录界面添加工具栏3.2 创建工具栏对象4、总结1、前言 今天遇到了个问题&#xff0c;顶部的工具栏&#xff0c;像软键盘&#xff0c;时间显示和退出按钮那些&#xff0c;想在多个界…

C#和SQL Server连接常用通讯方式

C#和SQL Server连接通讯 在 C# 中与 SQL Server 建立数据库连接&#xff0c;主要通过 ADO.NET 技术实现。以下是几种常见的连接方式及相关实践&#xff1a; ADO.NET 全面指南&#xff1a;C# 数据库访问核心技术 ADO.NET 是 .NET Framework 中用于数据访问的核心组件&#xf…

安卓10.0系统修改定制化____实现自动开启 USB 调试​的步骤解析 列举常用的几种修改方法

对于安卓开发者、测试人员,甚至是喜欢折腾手机的数码爱好者来说,USB 调试是一个非常重要的功能。它能让手机与电脑相连,实现应用安装、系统调试、数据传输等操作。但每次连接手机都要手动去设置里开启 USB 调试,实在麻烦。其实,通过修改安卓 10.0 的 ROM,就能让手机自动开…

Redisson详细教程 - 从入门到精通

目录 1. 什么是Redisson 2. 为什么要用Redisson 3. 环境准备和配置 4. 基础使用方法 5. 分布式数据结构 6. 分布式锁详解 7. 分布式服务 8. 实际应用场景 9. 最佳实践 10. 常见问题解答 总结 1. 什么是Redisson 简单理解 想象一下,Redis就像一个超级强大的"内…

动态规划VS记忆化搜索(2)

luoguP1434滑雪 题目描述 Michael 喜欢滑雪。这并不奇怪&#xff0c;因为滑雪的确很刺激。可是为了获得速度&#xff0c;滑的区域必须向下倾斜&#xff0c;而且当你滑到坡底&#xff0c;你不得不再次走上坡或者等待升降机来载你。Michael 想知道在一个区域中最长的滑坡。区域由…

如何将服务守护进程化

进程组 什么是进程组 之前我们提到了进程的概念&#xff0c; 其实每一个进程除了有一个进程 ID(PID)之外 还属于一个进程组。进程组是一个或者多个进程的集合&#xff0c; 一个进程组可以包含多个进程。 每一个进程组也有一个唯一的进程组 ID(PGID)&#xff0c; 并且这个 PGID …

【跟着PMP学习项目管理】项目管理 之 范围管理知识点

目录 一、收集需求 1、知识点汇总 2、输入 3、工具 4、输出 二、定义范围 1、知识点汇总 2、输入 3、工具 4、输出 三、创作工作分解结构 1、知识点汇总 2、输入 3、工具 4、输出 四、核实范围 1、知识点汇总 2、输入 3、工具 4、输出 五、控制范围 1、知…

AIX 环境磁盘空间管理指南

AIX 环境磁盘空间管理指南 在AIX环境中&#xff0c;磁盘空间的监控、管理与扩展是运维人员必备的技能。本文通过实际案例&#xff0c;系统地介绍如何查询磁盘信息、卷组(VG)、逻辑卷(LV)信息&#xff0c;以及在磁盘空间不足时的扩容方案&#xff0c;帮助读者掌握磁盘空间管理的…

k8s将service的IP对应的不同端口分配到不同的pod上

在Kubernetes中&#xff0c;Service是一种抽象层&#xff0c;它将请求路由到一组Pod。当你需要将Service的不同端口映射到不同的Pod时&#xff0c;可以通过以下两种主要方式实现&#xff1a; 方法一&#xff1a;使用单个Service的多端口配置 如果不同的Pod提供不同的服务&…

aic8800M40低功耗sdio wifi在arm-linux平台调试经验

背景 好多年没有搞过wifi相关的内容了,最近也被安排上了,把一颗低功耗aic8800M40的芯片在arm-linux开发板上做bring up,记录一下SDIO wifi调试的过程和经验,SDIO驱动这里需要改动一些linux内核HOST驱动代码,会在文章中贴出来: AIC8800M40芯片简介 这个wifi芯片是一颗低…

Redis基础(1):NoSQL认识

SQL和NoSQL数据库可以分为关系型数据库和非关系型数据库&#xff0c;SQL(Structured Query Language)相信大家并不陌生&#xff0c;这是用于操作关系型数据库的语言&#xff0c;而NoSQL&#xff0c;顾名思义&#xff0c;它对应的就是非关系数据库&#xff0c;它是操作非关系型数…