某天前端在調接口的時候,發現登陸頁面得驗證碼接口竟然沒有響應數據,顯示的是500響應碼。因而我一路排查,首先排查驗證碼接口所屬的微服務是否正常,經過lsof -i:服務端口進行排查,發現該微服務進程存在,同時我在服務註冊中心的服務管理列表也發現該服務正常註冊。結合以前遇到的問題,驗證碼接口報500,沒有及時響應數據,與Redis有關,驗證碼的數據會存放Redis,我再次排查Redis,發現Redis也正常,最後我看錯誤日誌。我排查該問題的步驟:前端
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000794500000, 576716800, 0) failed; error='Cannot allocate memory' (errno=12)
這時我冷靜下來,看日誌信息,再次發現了這句話」設備上沒有空間」。因而經過關鍵字搜索,找到了問題所在,如圖所示:mysql
結合Windows,形象地歸納,就是個人系統盤C盤滿了。linux
我仔細想了下,發現我將不少軟件和服務以及日誌所有放在/usr下的某個目錄裏,因而我一路排查後,發現有這麼幾類文件佔用很大的空間:nginx
問題的根源在於不合理的佔用系統盤空間,將這些不合理的從系統盤空間轉移出去便可,轉移到磁盤空間充足的,也就是/dev/mapper/centos-home下。程序員
我作了這些事情:sql
最終解決了這個問題,釋放了50%的空間,其中還有15%暫時不能動。
這樣一來,/dev/mapper/centos-root這個系統盤獲得了充分釋放,同時/dev/mapper/centos-home也獲得了充分利用(再也不資源閒置)。centos
命令格式以下:
du -sh 文件路徑服務器
du -sh *
執行就能看到當前文件以及文件夾所佔用內存。佔用內存多的,可進一步查看究竟是什麼緣由佔用這麼多內存的。app
下面就是我經過du -sh *命令查看內存佔用最多的文件或文件夾:運維
經過du -sh 命令,我排查到原來是nacos下的bin目錄佔用內存最多,其它不多,因而我進一步查看,發現bin目錄下的log目錄佔用內存最多,由於該log目錄下主要是nacos的訪問日誌,最後我經過du -sh 命令查看,如圖所示:
由圖可知,平均一個日誌文件就是一百多M,足足佔了十幾個G也就不足爲奇了。
個人解決辦法很簡單,分爲兩個方面:
第一方面是定時刪除僅保留一個和備份遷移到/home下的某個目錄;
第二個方面經過修改nacos的配置解決,具體參考以下連接:
Nacos系列(4)-Nacos各類日誌太多問題的終極解決辦法
經過命令排查(即du -sh *),我發現是MySQL下的data目錄佔用磁盤空間最大,其中有一個足足佔了4個多G,針對這樣的問題,我將其直接由/usr/software目錄下遷移到/home下,這樣一來系統盤的空間再度獲得釋放,遷移後須要改mysql的配置文件(即my.cnf文件)。
之因此佔用這麼多,前面我提到過是由於離線地圖,離線地圖包括街道地圖和衛星地圖,兩個加在一塊兒足足二十多G,爲此我將其遷移到/home下的某個目錄,而後修改Nginx的核心配置nginx.conf文件進行映射,這樣一來系統盤的空間再次獲得釋放,同時用戶盤的空間獲得了充分利用。
Project主要放源代碼和打包成功產生的jar,我仍是用老辦法將其遷移(遷移到/home下的某個目錄)。
問題的根本緣由在於不規範性。正常來講,不該該將用戶磁盤空間作的事情放在系統磁盤空間(與Windows同理)。從這一刻起,我也深深意識到規範性的重要,不規範性致使的bug何止千千萬萬,仔細想來個人開發經歷,形成bug的絕大多數緣由均是由於不規範,由於不規範,暴露出各類奇奇怪怪的bug。
另外從我排查問題來看也是頗有問題的,問題在於沒有用正確的態度對待日誌,其實一開始仔細排查日誌,定位到這個關鍵信息,而後將這樣的關鍵信息複製搜索引擎來尋找解決辦法,這樣一來就沒必要浪費了近一個多小時來搗鼓這樣的事情。
首先這樣的問題屬於運維範疇,而我做爲公司的兼職運維,面對這樣的問題,首先從規範入手,制定可行的規範,從根本上杜絕這樣的問題再現,對於這樣的問題,我總結的原則以下: