nginx斷點上傳
1. 如何使用vscode斷點調試laravel
安裝和配置 vscode 插件 php Debug
通過 marketplace 平台安裝插件 phpdebug。 1.9.0 版的 vscode
集成了插件管理功能在左側的菜單欄,點擊擴展按鈕 > 輸入 PHP Debug > 在搜索結果中找到 PHP debug >
點擊安裝,安裝後重啟 vscode 使其生效。
打開調試界面。點擊右上角的齒輪按鈕配置 launch.json 文件,選擇 PHP 選項。此時會生成 launch.json 文件,左側的 debug 類型默認選中了 listen for xdebug 選項。修改 launch.json 配置如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"stopOnEntry":false,
"localSourceRoot": "${workspaceRoot}/public",
"serverSourceRoot": "/home/vagrant/Code/Laravel/public",
"log": false
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${workspaceRoot}/public/index.php",
"cwd": "${workspaceRoot}/public/",
"port": 9000
}
]
}
這里主要添加了 localSourceRoot 和 serverSourceRoot 兩個配置項:
localSourceRoot 配置的是 laravel 項目程序入口位置,${workspaceRoot} 表示當前工程項目根目錄,所以取值 "${workspaceRoot}/public" ;
serverSourceRoot 配置的是遠程伺服器端 laravel 站點根目錄位置,該目錄必須與 localSourceRoot 位置對應。根據 homestead 環境,這里取值 "/home/vagrant/Code/Laravel/public";
啟動Homestead
打開命令行終端,依次執行下列命令:
$ vagrant up
$ vagrant ssh
安裝 XDebug
註:homestead 已集成了 XDebug,文件位置在 /usr/lib/php/20160303/xdebug.so 目錄中。如果你不需要更新版本的 Xdebug 功能,可以忽略此步驟。
建議你在 laravel 項目程序入口目錄 public 下創建一個臨時文件(如 test.php),輸入 phpinfo()。把 PHPinfo 的執行結果復制並粘貼到 XDebug installation wizard,程序會根據你的系統環境給出相應的安裝向導。
1. 下載 xdebug-2.5.0.tgz
2. 解壓文件 tar -xvzf xdebug-2.5.0.tgz
3. 執行 cd xdebug-2.5.0
4. 執行 ./configure
5. 執行 make
6. 執行 cp moles/xdebug.so /usr/lib/php/20160303
配置 XDebug
打開文件 /etc/php/7.1/fpm/php.ini, 添加如下配置:
zend_extension = /usr/lib/php/20160303/xdebug.so
[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = 192.168.10.1
xdebug.remote_port = 9000
主要有五項配置:
zend_extension 指定要載入的 xdebug 擴展文件;
xdebug.remote_enable 啟用遠程調試;
xdebug.remote_autostart 默認情況下需要通過指定 HTTP GET/POST 變數來啟用遠程調試,通過把該選項配置為 1 可以使所有請求自動連接至調試終端而無需指定專屬變數信息。詳情見: Remote Debugging;
xdebug.remote_host 默認取值 localhost ,由於我們的 homestead 在虛擬機中,並且以 config.vm.network "private_network"形式配置了IP ,所以這里不能配置 localhost。需要手動指定 PC 機 IP 192.168.10.1;
xdebug.remote_port 默認埠號是 9000,這個在前面的 vscode 配置文件 launch.json 中有設置,與其對應即可。
重啟web服務Nginx
$ nginx -s reload
啟動 xdebug 調試
在 vscode 中進入 debug 界面,點擊 開始調試 按鈕,PHPdebug 插件將在本機的 9000 埠監聽來自 192.168.10.10 的網路請求;
在項目文件 public/index.php 文件中打個斷點,然後通過瀏覽器訪問 http://homestead.app ;
一旦 homestead 中有網路請求到 laravel 站點 ,vscode 編輯器即可接收到debug信息並在斷點位置暫停下來,同時列印出相關的執行環境上下文信息。
2. 備忘6:分布式文件系統以及MinIO
分布式文件系統是用於滿足大量用戶訪問大量文件需求的解決方案。市面上常見的分布式文件系統產品包括阿里雲對象存儲服務和網路對象存儲。
MinIO 是一個輕量級服務,它遵循亞馬遜 S3 雲存儲服務介面,適用於存儲大容量非結構化數據,如圖片、視頻、日誌文件、備份數據和容器/虛擬機鏡像等。它具備輕量化、易於使用和功能強大的特點,支持多種平台,單個文件最大可至5TB,並兼容 Amazon S3 介面。MinIO 提供了 Java、Python、GO 等多版本SDK支持。
MinIO 集群採用去中心化共享架構,各節點平等互聯。通過 Nginx 可實現負載均衡訪問。
推薦使用 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 設置賬號和密碼。賬號和密碼默認為 minioadmin、minioadmin,可通過環境變數設置。集群需要4個硬碟,大於2個硬碟的損壞將導致數據無法恢復。
MinIO 提供了多個語言版本 SDK 的支持,例如 Java 版本的文檔可在官網找到。最低需求為 Java 1.8 或更高版本。需要三個參數以連接至 MinIO 服務。
實際代碼實現中,可以將 Minio 相關信息配置在 Nacos 中,並在 media-service-dev.yaml 文件中進行設置。在 media-service 工程中編寫配置類。
斷點續傳是一種功能,允許在下載或上傳過程中,將任務劃分為多個部分,並通過多線程分別進行處理。如遇網路故障,可從已完成的部分繼續進行未完成部分的下載或上傳,無需重新開始。此功能可優化操作時間,提升用戶體驗。
3. IDEA遠程調試Java代碼,幫你提升bug修復效率
前言
在遇到線上或測試環境的代碼異常問題時,我們經常需要進行問題定位。傳統的做法是查看異常日誌,定位到出錯代碼,再結合相關參數和異常信息進行推斷。然而,很多異常問題需要細致的debug才能精準定位解決,此時,能夠如同在本地調試一樣處理遠程主機上的程序,可以顯著提高bug修復效率。IDEA遠程調試提供了解決方案,允許我們在線上環境執行本地的調試過程,排查遠程程序的BUG或代碼執行流程。
遠程調試原理
本地與伺服器端通過socket連接建立監聽,當客戶端訪問伺服器時,伺服器會先查詢本地IDE中是否有斷點,如有則暫停在當前斷點,否則返回客戶端。
理論基礎
JPDA(Java Platform Debugger Architecture)由三個規范組成:JVMTI(JVM Tool Interface)、JDWP(Java Debug Wire Protocol)與JDI(Java Debug Interface)。
1.JVMTI定義了虛擬機應提供的調試服務,包括調試信息、調試行為和通知,由虛擬機實現者提供實現,並集成在虛擬機中。
2.JDWP定義了調試服務和調試器之間的通信,包括調試信息格式和調試請求機制。
3.JDI在高層次上定義了調試者可以使用的調試介面,方便與遠程調試服務交互,Java語言實現,調試器實現者可以直接使用該介面訪問虛擬機調試服務。
遠程調試分類
遠程調試分為主動連接和被動連接兩種模式。
主動連接模式:伺服器配置監聽埠,本地IDE連接遠程埠進行調試,常用於解決一般調試問題。
被動連接模式:本地IDE監聽埠,等待遠程連接。適用於遠程服務啟動困難,啟動時連接到本地進行調試分析。
主動連接調試步驟
1.1 對於SpringBoot,通過命令行添加選項並重啟,確保新參數位於-jar之前。
1.2 對於Tomcat,修改啟動腳本添加選項並重啟。
IDEA中配置調試伺服器
2.1 IDEA設置斷點伺服器。
防火牆埠放行
3. 如果遠程伺服器與IDEA網路不通,需開放埠以確保通信。
被動連接調試步驟
首先配置IDEA監聽埠,如默認5005。啟動遠程服務時,通過命令行添加選項並重啟,設置suspend=y以啟動時即中斷,address=ip:port修改為本地對外IP。
開始調試
確保雙方代碼一致,否則遠程調試無法啟動。啟動配置的遠程伺服器,查看日誌確認連接成功。在本地IDE設置斷點,通過瀏覽器或手機訪問伺服器,IDE即可在斷點處暫停並跟蹤。
關閉調試
調試完成後,恢復防火牆設置。關閉遠程伺服器的Debug功能,以免影響性能。
進階學習資源
在Java領域進階,可以參考《JAVA核心知識點手冊》。這本手冊內容涵蓋Java基礎、集合、異常與反射、IO與NIO、多線程、JVM、Linux、MySql、Spring、Spring Cloud、Mybatis、Nginx、Redis、Dubbo、Kafka、SpringBoot等,提供全面的知識體系和實踐指導。