day048-系統負載高排查流程與前后端分離項目

文章目錄

  • 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;它是操作非關系型數…