中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詭異bug的解決過程是什么樣的

發布時間:2021-10-20 16:10:13 來源:億速云 閱讀:139 作者:柒染 欄目:大數據

今天就跟大家聊聊有關詭異bug的解決過程是什么樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

本文記錄一次很詭異的bug (進程莫名被終止)的發現過程,并且詳細記錄了問題背后的原因,以及解決方案。

背景

此項目是一個接口的自動化測試平臺,需要接入自動化工程(每個自動化工程對應一個被測應用工程),每個自動化工程都是獨立運行的進程。 自動化工程用的是springboot, 利用maven插件運行,mvn spring-boot:run 。 該平臺接入了很多自動化工程,在一臺linux機器上運行著很多個自動化工程的進程。

現象

偶爾會莫名的出現自動化工程的進行被殺掉的情況,需要在平臺上重新操作,啟動該自動化工程之后,才能繼續運行任務。 直到系統規模擴大,自動化工程數目變多,自動化用例變多,運行任務時間變長,自動化工程被莫名終止的概率加大。

分析

  1. 查看log, 發現自動化工程被終止的log信息如下:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 09:32 min
[INFO] Finished at: 2019-08-15T17:39:55+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.2.0.M5:run (default-cli) on project coupon_batch-Test: Application finished with exit code: 137 -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
  1. 分析log產生的原因,google : ERROR: Maven JVM terminated unexpectedly with exit code 137

For reference the status code 137 (128 + 9) typically means (can differ between flavours of unix). That the process was terminated by receipt of a signal. In this case signal 9 which is SIGKILL and unblockable kill. If this is the case the underlying machine/OS needs more virtual memory. This can be added by either adding physical memory or swap space as appropriate. You should try to increase the virtual memory of your machine. Note:This also explains why a Jenkins restart (temporarily) fixes the issue. Jenkins Maven Build 137 Error

  1. 至此找到問題原因:linux swap 分區不足,導致該進程被linux OOM Killer殺掉。

解決問題需要的背景知識

1. 什么是swap?

swap space是磁盤上的一塊區域,可以是一個分區,也可以是一個文件,或者是他們的組合。 簡單點說,當系統物理內存吃緊時,Linux會將內存中不常訪問的數據保存到swap上, 這樣系統就有更多的物理內存為各個進程服務,而當系統需要訪問swap上存儲的內容時, 再將swap上的數據加載到內存中,這就是我們常說的swap out和swap in。

2. 為什么需要swap ?

  1. 對于一些大型的應用程序(如LibreOffice、video editor等),在啟動的過程中會使用大量的內存, 但這些內存很多時候只是在啟動的時候用一下,后面的運行過程中很少再用到這些內存。有了swap后, 系統就可以將這部分不這么使用的內存數據保存到swap上去,從而釋放出更多的物理內存供系統使用。

  2. 很多發行版(如ubuntu)的休眠功能依賴于swap分區,當系統休眠的時候, 會將內存中的數據保存到swap分區上,等下次系統啟動的時候,再將數據加載到內存中,這樣可以加快系統的啟動速度, 所以如果要使用休眠的功能,必須要配置swap分區,并且大小一定要大于等于物理內存

  3. 在某些情況下,物理內存有限,但又想運行耗內存的程序怎么辦? 這時可以通過配置足夠的swap空間來達到目標,雖然慢一點,但至少可以運行。

  4. 雖然大部分情況下,物理內存都是夠用的,但是總有一些意想不到的狀況,比如某個進程需要的內存超過了預期, 或者有進程存在內存泄漏等,當內存不夠的時候,就會觸發內核的OOM killer, 根據OOM killer的配置,某些進程會被kill掉或者系統直接重啟(默認情況是優先kill耗內存最多的那個進程), 不過有了swap后,可以拿swap當內存用,雖然速度慢了點,但至少給了我們一個去debug、kill進程或者保存當前工作進度的機會。

  5. 如果看過Linux內存管理,就會知道系統會盡可能多的將空閑內存用于cache,以加快系統的I/O速度, 所以如果能將不怎么常用的內存數據移動到swap上,就會有更多的物理內存用于cache,從而提高系統整體性能。

3. swap的缺點

  1. 上面介紹了swap的優點,那swap的缺點呢?swap是存放在磁盤上的,磁盤的速度和內存比較起來慢了好幾個數量級, 如果不停的讀寫swap,那么對系統的性能肯定有影響,尤其是當系統內存很吃緊的時候,讀寫swap空間發生的頻率會很高, 導致系統運行很慢,像死了一樣,這個時候添加物理內存是唯一的解決辦法。

  2. 由于系統會自動將不常用的內存數據移到swap上,對桌面程序來說,有可能會導致最小化一個程序后, 再打開時小卡一下,因為需要將swap上的數據重新加載到內存中來。

Linux交換空間(swap space)

采用的解決方案: 增加swap文件

#先創建一個新的512M的文件,用來作為swap文件,文件路徑可以隨便
#fallocate這個命令依賴于文件系統,有些老的文件系統不支持這個命令,比如ext2,
#這種情況下可以用dd來實現同樣的效果:
#sudo dd if=/dev/zero of=/mnt/512MiB.swap bs=1024 count=524288
#fallocate和dd的區別在于:
#fallocate是先聲明這么多,然后在具體用到的時候文件系統才分配真正的物理磁盤空間,就是用一點分配一點,
#而dd是一開始就實實在在的寫了512m的數據到物理磁盤空間。
#所以作為測試來說fallocate方便些,因為剛開始不用寫任何數據,要快
dev@dev:~$ sudo fallocate -l 512m /mnt/512MiB.swap

#修改文件的權限,避免其他用戶對這個文件進行誤操作
dev@dev:~$ sudo chmod 600 /mnt/512MiB.swap

#格式化為swap文件
dev@dev:~$ sudo mkswap /mnt/512MiB.swap

#將新的文件加入到系統中
dev@dev:~$ sudo swapon /mnt/512MiB.swap

#這時候可以看到新的swap文件已經被加入到系統中了,類型為file
#這里可以看到由于優先級最高,第一個swap分區/dev/dm-1已經被使用了24K
dev@dev:~$ swapon -s
Filename                Type        Size    Used    Priority
/dev/dm-1               partition   524284  24      -1
/dev/sdb1               partition   2096124 0       -2
/mnt/512MiB.swap        file        524284  0       -3

#從free命令的輸出可以看到,經過前面兩輪添加swap分區和文件,
#現在系統的交換空間已經變成3G(3144692K)了
dev@dev:~$ free
              total        used        free      shared  buff/cache   available
Mem:         500192       39112        9564        1996      451516      430820
Swap:       3144692          24     3144668

#同樣為了保證系統重啟后會自動加載我們新的swap文件,需要修改/etc/fstab文件
dev@dev:~$ sudo sh -c 'echo "/mnt/512MiB.swap none  swap    sw   0    0" >> /etc/fstab'

進階: OOM Killer 配置

理解和配置 Linux 下的 OOM Killer

技術上的問題總會有原因的,就看你找不找得到。 技術的問題如果深究的話,有很多可以學習的地方,一個bug就是一個學習機會。

看完上述內容,你們對詭異bug的解決過程是什么樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

bug
AI

湘潭县| 廉江市| 尚义县| 正镶白旗| 高清| 钦州市| 土默特右旗| 保德县| 莎车县| 昭觉县| 神农架林区| 英山县| 白城市| 中西区| 龙口市| 叶城县| 太仆寺旗| 乳山市| 九寨沟县| 长岛县| 平和县| 乃东县| 商洛市| 稷山县| 龙南县| 扎囊县| 中江县| 甘孜县| 怀来县| 环江| 宁强县| 沙雅县| 中西区| 黄平县| 武陟县| 浙江省| 浑源县| 恭城| 黄山市| 循化| 微博|