nested exception is java.lang.StackOverflowError解析

来源:https://www.cnblogs.com/sam-uncle/archive/2020/03/23/12550806.html
-Advertisement-
Play Games

背景介紹: 項目是微服務的,使用docker容器,使用jenkins部署。測試環境有個公共服務一直以來都能正常發佈,突然有一天不行了,經常發佈失敗,然後多發佈幾次就好了。 報錯如下: 是棧溢出了,一般是新代碼有死迴圈會出現。但是本地啟動沒問題並且環境上多發幾次也能成功,說明沒有死迴圈,肯定是其他原因 ...


背景介紹:

項目是微服務的,使用docker容器,使用jenkins部署。測試環境有個公共服務一直以來都能正常發佈,突然有一天不行了,經常發佈失敗,然後多發佈幾次就好了。

報錯如下:

 

 

 是棧溢出了,一般是新代碼有死迴圈會出現。但是本地啟動沒問題並且環境上多發幾次也能成功,說明沒有死迴圈,肯定是其他原因。

分析問題:

Java運行時數據區分5部分:

 

 

 從報錯上來看是虛擬機棧溢出。

虛擬機棧是屬於線程私有的,每個線程都會有一個虛擬機棧,隨線程的創建而創建,消失而消失。它由一個個的棧幀組成,線程每次調用一個方法,就會有一個棧幀生成,並壓棧。方法調用完之後,棧幀則出棧。當棧的深度不夠,即棧的大小不足以放下所有的棧幀的時候,就會拋棧溢出的異常。

問題明確了,是棧的大小不夠。

解決問題:

要把棧大小設置的大一點,要設置的大一點首先要知道目前是多大。項目未對虛擬機棧的大小作設定,也就是說目前的大小是預設值。

JDK5之後每個棧大小是1M,之前是256k。我們用的是JDK8,那麼大小就是1M。要把棧大小設成大於1M的值。但是又不能設置太大,因為如果單個線程棧太大,就會限制最大線程數量。

項目沒有高併發的情況,所以就先設置成2M。設置方法,在JVM啟動參數裡面加上 -Xss2m

問題解決,再也沒出現過問題。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 承接上文 通過discovery和define完成了第一輪企業級別的發散和收斂。 即:站在企業的高度,基於企業願景和內外部環境,通過戰略分解和現狀調研,應用企業架構的方法確定了最終的平臺型企業架構,並確定了需要哪些中台,以及建設先後的問題。 中台的設計階段:進行第二輪的發散和收斂,站在一個中台產品的 ...
  • 在Java 7發行版中,oracle在異常處理機制上也做了一些不錯的更改。這些主要是 改進的catch塊 和 多餘的throws子句 。讓我們看看他們是如何改變的。 1.改進了Java 7中的catch塊 在此功能中,現在您可以 在單個catch塊中捕獲多個異常 。在Java 7之前,您只能在每個c ...
  • 入門訓練3 圓的面積 問題描述 給定圓的半徑r,求圓的面積。 輸入格式 輸入包含一個整數r,表示圓的半徑。 輸出格式 輸出一行,包含一個實數,四捨五入保留小數點後7位,表示圓的面積。 說明:在本題中,輸入是一個整數,但是輸出是一個實數。 對於實數輸出的問題,請一定看清楚實數輸出的要求,比如本題中要求 ...
  • 第一章 認識Java8以及函數式編程 儘管距離Java8發佈已經過去7、8年的時間,但時至今日仍然有許多公司、項目停留在Java7甚至更早的版本。即使已經開始使用Java8的項目,大多數程式員也仍然採用“傳統”的編碼方式。 即使是在Java7就已經有了處理異常的新方式—— ,但大多數程式員也仍然採用 ...
  • 前言 2019 年底開始蔓延的新型肺炎疫情牽動人心,作為個體,我們力所能及的就是儘量待在家中少出門。 看到一些朋友叫設計同學幫忙給自己的頭像戴上口罩,作為技術人,心想一定還有更多人有這樣的訴求,不如開發一個簡單的程式來實現這個需求,也算是幫助設計姐姐減少工作量。 於是花了些時間,寫了一個叫做 fac ...
  • 企業應用中,涉及到修改狀態的場景太多了。比如,企業入網後,要審核資質。個人領取任務後,企業管理員要審核領取人。 應用管理系統中,通常是下圖這樣,在列表後有操作按鈕來修改數據記錄的狀態。 點擊“通過”/“拒絕”操作,要修改數據記錄的status欄位。服務端程式邏輯怎麼實現呢? 先定義服務端api介面: ...
  • @2020.3.23 課後練習——裝飾器 一:編寫函數,(函數執行的時間用time.sleep(n)模擬) 二:編寫裝飾器,為函數加上統計時間的功能 三:編寫裝飾器,為函數加上認證的功能 四:編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件),要求登錄成功一次,後續的函數都無需再輸入用 ...
  • 用於對類文件進行分類管理,給類文件提供多層命名空間,類名的全稱是:包名.類名,包也是一種封裝形式。 javac -d 目錄 *.java 通過package被訪問的類和類中成員要public修飾。 不同包中的子類還可以直接訪問父類中被protected許可權修飾的成員。 包與包之間可以使用的許可權有兩種 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...