java面試題:List如何排序?內存溢出/OOM怎么回事?如何排查和解決?

List如何排序

List排序可以通過實現Comparable接口并且實現compareTo方法,或者傳入comparator去實現排序。

內存溢出/OOM是怎么回事?

內存溢出就是程序在運行的過程中,申請的內存超過了最大內存限制,導致JVM拋出OOM異常,這個叫內存溢出。

一般內存溢出有蠻多情況的,像是我之前的第一份實習不是要用java去做RPC自動化系統嘛。他本質就是java去做爬蟲,所以自己私底下做過一些練習,然后就遇到了一個情況就是某個網頁它指向的是下載某個文件,這個文件可能很大,就導致堆內存溢出。

我當時的解決方案是首先,通過它的url看下有沒有特定的后綴,像是.doc之類的,如果是的話這個url就不加入處理的隊列。其次就是通過httpURLConnectiongetContentLength()去加上限制,如果超過3MB,也是不把這個url加入處理的隊列。

當然只能說規避了一小部分,首先就是很多url都沒有像.doc這樣顯式的后綴的。其次就是很多HTT P Response其實都不設置contentLength的。

所以后續我記得還是手動設置了一個byte數組當作緩沖池,如果填滿了這個數組而且還有未讀完的數據的話,就放棄這個url。

那除了這種堆內存溢出之外的情況,還比較經常遇到的,可能寫算法經常就可以看到棧溢出。就是循環遞歸沒有寫好之類的。

內存溢出如何排查和解決?

至于排查的話,這個項目是沒有配普羅米修斯的,因為是我自己寫的demo嘛。如果有配普羅米修斯的話會簡單很多。那我們可以在啟動項目的時候設置一下,當他內存溢出的時候保存一個內存快照,一個指定的dump文件。然后用分析工具,譬如MAT去執行分析。一般它會幫你分析最大的對象是誰,次大的對象是誰等等。然后就可以通過這個對象的路徑,它是哪個包下面的,去定位到具體是哪段代碼導致的內存溢出。

提到這個就得說一句,這也是為什么我們啟動線程的時候最好命名的原因,像是如果沒有命名的話,可能是公用線程池的一個線程,或者tomcat的線程,他在排查的時候就沒有名字,只有數字序號之類的,排查起來就會麻煩一些。

那如果我們排查到是緩存沒有做好的原因,那就去考慮一下緩存的過期時間是不是沒有設置好,是不是可以放到redis里面之類的。從而去解決問題。

當然,其實我們應該內存達到60%左右就設置一下告警的。因為內存不斷升高,在它溢出之前它肯定不斷GC了,那GC的話又是很耗cpu的,就導致整個服務的響應都不是很好。最后內存溢出嚴重的話,整個服務應用可能都無響應了。甚至嚴重點的話,可能還會觸發操作系統的內存溢出,然后終端進程也被kill掉了。

而且就是剛剛提到的,保存dump文件本身也是會占用cpu的,也會占用磁盤啊之類的,不過一般就是cpu。所以要盡量挑業務沒有那么繁忙的時候。

內存升高的原因有很多啊,像是緩存使用不當、有很多突增的流量、或者內存泄漏都會導致內存升高,不及時處理的話就會導致內存溢出。

其實開發中經常碰到內存溢出的情況,特別是一開始整個服務的規模很小,沒有多少日活的話,代碼可能就寫得比較簡單,然后不想引入那么多中間件,可能緩存就隨便做了,監控也沒有。結果后來數據越來越多,然后別人或者說自己也忘了哪里寫了個緩存了,就導致內存溢出了。然后只有一個日志去排查就很費勁。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85833.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85833.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85833.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python cryptography【密碼庫】庫功能與使用指南

邊寫代碼零食不停口 盼盼麥香雞味塊 、卡樂比(Calbee)薯條三兄弟 獨立小包、好時kisses多口味巧克力糖、老金磨方【黑金系列】黑芝麻丸 邊寫代碼邊貼面膜 事業美麗兩不誤 DR. YS 野森博士【AOUFSE/澳芙雪特證】377專研美白淡斑面膜組合 優惠劵 別光顧寫…

第二十四章 流程控制_ if分支

第二十四章 流程控制: if分支和輸入 正如許多編程語言一樣Shell也有自己的條件分支語句。有時需要根據情況進行相應的處理,因此可以通過條件分支語句實現,本章主要介紹的是if分支語句。 if語句 在Shell中if語句語法格式如下: if commands…

電腦網絡重置,找不到原先自家的WIFI,手機還能正常連接并上網

問題排查:1、電腦感覺網絡太慢,因此打算點擊了網絡重置 2、點擊提示會刪除網絡,在五分鐘后關機重啟 3、從設備管理器設備的無線wifi屬性-事件中發現刪除記錄 4、選擇更新驅動程序 5、從列表中選取 6、更改回老驅動版本 備選方案&#…

C語言_預處理詳解

1. 預定義符號 C語言設置了一些預定義符號,可以直接使用,預定義符號也是在預處理期間處理的 1 __FILE__ //進行編譯的源文件 2 __LINE__//文件當前的行號 3 __DATE__ //文件被編譯的日期 4 __TIME__//文件被編譯的時間 5 __STDC__//如果編譯器遵循ANSI…

【QT】使用QT幫助手冊找控件樣式

選擇幫助—》輸入stylesheet(小寫)—》選擇stylesheet—》右側選擇Qt Style Sheets Reference 2.使用CtrlF—》輸入要搜索的控件—》點擊Customizing QScrollBar 3.顯示參考樣式表–》即可放入QT-designer的樣式表中

SQL知識合集(二):函數篇

TRIM函數 作用:去掉字符串前后的空格 SELECT * FROM your_table_name WHERE TRIM(column_name) ; COALESCE函數 作用:返回其參數中的第一個非 NULL 值。它可以接受多個參數,并從左到右依次評估這些參數,直到找到第一個非 NUL…

Cursor 工具項目構建指南: Uniapp Miniprogram 環境下的 Prompt Rules 約束

簡簡單單 Online zuozuo: 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo :本心、輸入輸出、結果 簡簡單單 Online zuozuo : 文章目錄 Cursor 工具項目構建指南: Uniapp Miniprogram 環境下的 Prompt Rules 約束前言項目簡…

Java轉Go日記(六十):gin其他常用知識

1. 日志文件 package mainimport ("io""os""github.com/gin-gonic/gin" )func main() {gin.DisableConsoleColor()// Logging to a file.f, _ : os.Create("gin.log")gin.DefaultWriter io.MultiWriter(f)// 如果需要同時將日志寫入…

cocos單例工廠和自動裝配

cocos單例工廠和自動裝配 1 單例工廠 1.1 分析 實例字典 原理很簡單&#xff0c;只是一個map&#xff0c;確保每個類只保留一個實例&#xff1b; private static _instances new Map<string, any>();獲取與存儲實例 這邊使用的方式是生成一個唯一的id存儲在類上&…

django paramiko 跳轉登錄

在使用Django框架結合Paramiko進行SSH遠程操作時&#xff0c;通常涉及到自動化腳本的執行&#xff0c;比如遠程服務器上的命令執行、文件傳輸等。如果你的需求是“跳轉登錄”&#xff0c;即在登錄遠程服務器后&#xff0c;再通過該服務器的SSH連接跳轉到另一臺服務器&#xff0…

《C++初階之類和對象》【命名空間 + 輸入輸出 + 缺省參數 + 函數重載】

【命名空間 輸入&輸出 缺省參數 函數重載】目錄 前言&#xff1a;---------------hello world---------------比較C語言和C的第一個程序&#xff1a;hello word ---------------命名空間---------------什么是命名空間&#xff1f;怎么使用命名空間&#xff1f;怎么定義…

[USACO1.5] 八皇后 Checker Challenge Java

import java.util.*;public class Main {// 標記 對角線1&#xff0c;對角線2&#xff0c;所在x軸 是否存在棋子static boolean[] d1 new boolean[100], d2 new boolean[100], d new boolean[100]; static int n, ans 0;static int[] arr new int[14]; // 記錄一輪棋子位置…

云服務器Xshell登錄拒絕訪問排查

根據你的描述&#xff0c;使用Xshell 8登錄云服務器時顯示“拒絕訪問”&#xff0c;可能涉及多個原因。以下結合搜索結果整理出排查和解決方法&#xff0c;按優先級排序&#xff1a; 一、檢查基礎網絡與端口連通性 本地網絡與服務器IP是否可達 在本地電腦的CMD中執行 ping 服務…

Python爬蟲實戰:研究urlunparse函數相關技術

1. 引言 1.1 研究背景與意義 在當今信息爆炸的時代,互聯網上的數據量呈現出指數級增長。如何從海量的網頁數據中高效地獲取有價值的信息,成為了學術界和工業界共同關注的問題。網絡爬蟲作為一種自動獲取網頁內容的技術,能夠按照預定的規則遍歷互聯網上的網頁,并提取出所需…

Spring AI學習一

隨著Chatpt的火爆&#xff0c;現在Spring官方也開始支持AI了并推出了Spring AI框架&#xff0c;目前還沒發布正式版本&#xff0c;這里可以先看一下官方依賴的版本。 Spring官網地址可以看這里&#xff1a;Spring | Home 目前官網上是有這兩個版本&#xff1a;1.0.0和1.1.0-SN…

reverse筆記

一&#xff0c;strcat的使用方法&#xff08;在攻防世界中刷題時遇到的&#xff09; 二&#xff0c;殼&#xff08;做題遇到過但是一直不是很理解&#xff0c;今天查了一下&#xff09; 殼是一種軟件保護技術&#xff0c;能夠防止程序被輕易地分析和修改。 總而言之&#xff0…

spring4第7-8課-AOP的5種通知類型+切點定義詳解+執行順序

繼續學習&#xff0c;方便自己復查記錄 ①AOP簡介&#xff1a; 面向切面編程(也叫面向方面編程)&#xff1a;Aspect Oriented Programming(AOP)。 Spring框架中的一個重要內容。。 通過預編譯方式和運行期間動態代理實現在不修改源代碼的情況下給程序動態統一添加功能…

EscapeX:去中心化游戲,開啟極限娛樂新體驗

VEX 平臺推出全新去中心化游戲 EscapeX&#xff08;數字逃脫&#xff09;&#xff0c;創新性地將大逃殺玩法與區塊鏈技術相融合。用戶不僅能暢享緊張刺激的解謎過程&#xff0c;更能在去中心化、公正透明的環境中參與游戲。EscapeX 的上線&#xff0c;為 VEX 生態注入全新活力&…

Multi Agents Collaboration OS:Web DeepSearch System

背景&#xff1a;多智能體協作驅動網絡信息處理的范式革新 隨著大型語言模型&#xff08;LLM&#xff09;能力的突破性進展&#xff0c;人工智能正從“單點賦能”向“系統協同”演進。傳統單一智能體在復雜業務場景中逐漸顯露局限&#xff1a;面對需多維度知識整合、動態任務拆…

React 第五十三節 Router中 useRouteError 的使用詳解和案例分析

前言 useRouteError 是 React Router v6.4 引入的關鍵錯誤處理鉤子&#xff0c;用于在 路由錯誤邊界&#xff08;Error Boundary&#xff09; 中獲取路由操作過程中發生的錯誤信息。 它提供了優雅的錯誤處理機制&#xff0c;讓開發者能夠創建用戶友好的錯誤界面。 一、useRou…