Java UUID生成的效能影響 – fastthread
Java 開發人員傾向於使用“java.util.UUIDrandomUUID()” API 來生成 UUID(通用唯一識別符號)編號(即“b8bbcbed-ca07-490c-8711-5118ee0af2f9”)。在某些情況下,使用此 API 可能會影響您的應用程式的可用性。讓我們在這篇文章中用一個真實的例子來討論這個 API。
java.util.UUIDrandomUUID() API是如何工作的?
java.util.UUIDrandomUUID() API內部使用作業系統中的 en[url=https://en.wikipedia.org/wiki/Entropy_(computing)]tropy[/url]來生成一個唯一的數字。
‘entropy’是什麼意思?
Linux核心使用某些技術,如使用者的滑鼠動作、硬體風扇噪音的變化、裝置驅動程式噪音的變化......來產生隨機數。
當作業系統中缺乏 ‘entropy’時,隨機數的生成就會變慢。當速度減慢時,呼叫'java.util.UUIDrandomUUID()'API呼叫的應用程式執行緒將被置於BLOCKED狀態,它們將無法進一步發展。
如果你的應用程式在一個關鍵的程式碼路徑中使用'java.util.UUIDrandomUUID()'API,而作業系統中缺乏‘entropy’,那麼多個執行緒就會進入這個BLOCKED狀態,使你的整個應用程式陷入停頓。
在Linux中檢查entropy的狀態
要檢查Linux中entropy的可用性,請執行以下命令。
cat /proc/sys/kernel/random/entropy_avail
如果你看到這個值小於1000,那麼它表明entropy的缺乏。這可能導致應用程式中的執行緒被封鎖。
潛在的解決方案
如果您的應用程式中出現此問題,以下是解決這些問題的潛在解決方案:
1. RHEL
此問題已在 RHEL 7 及以上版本中得到解決。如果您可以升級到 RHEL 7 或更高版本,請這樣做。
如果您在舊版本的 RHEL 上執行,則可以按照此處給出的建議來解決此問題。
2. 在 Linux 中安裝 Haveged
如果您的應用程式在 Linux 中執行,那麼您可以考慮安裝 'haveged' 庫。“ haveged 專案”旨在提供一個基於HAVEGE 演算法改編的易於使用、不可預測的隨機數生成器。這是“已處理”專案GIT 儲存庫頁面。以下是如何安裝它:
在基於 Debian 的平臺(Debian、Ubuntu)上:
sudo apt-get install rng-tools sudo update-rc.d haveged defaults |
在 Redhat 平臺(RHEL、Fedora、CentOS)上:
sudo yum install rng-tools sudo chkconfig haveged on |
3. 使用 /dev/urandom 代替 /dev/random
類 Unix 作業系統提供了特殊檔案“/dev/random”,用作偽隨機數生成器。Java 使用這個檔案來生成隨機數。您可以將其配置為使用“/dev/urandom”而不是“/dev/random”。
'/dev/urandom' 是另一個能夠生成隨機數的特殊檔案。但是,由於隨機性較小,它具有降低安全性的缺點。您可以透過在啟動期間將以下 JVM 引數傳遞給您的應用程式來實現它:
-Djava.security.egd=file:/dev/./urandom |
相關文章
- Java教程:影響MySQL效能的配置引數JavaMySql
- Java中的Exception拋異常對效能的影響 - BaeldungJavaException
- oracle生成uuidOracleUI
- Java 實現的SnowFlake生成UUID (Java程式碼實戰-007)JavaUI
- 影響mysql效能的因素都有哪些MySql
- 影響MySQL效能的硬體因素MySql
- 影響MySQL效能的硬體因MySql
- 影響HTTP效能的常見因素HTTP
- uuid自動生成UI
- 可笑,你竟然不知道 Java 如何生成 UUIDJavaUI
- session效能的影響,後臺 flush dirtySession
- DB2 HADR對效能的影響DB2
- 影響儲存網路效能的因素有哪些?
- MySQL影響伺服器效能的幾個方面MySql伺服器
- 怎麼減少行鎖對效能的影響?
- 分支對程式碼效能的影響和優化優化
- MySQL null值儲存,null效能影響MySqlNull
- 容器化對資料庫的效能有影響嗎?資料庫
- 磁碟排序對Oracle資料庫效能的影響PT排序Oracle資料庫
- 伺服器IO瓶頸對MySQL效能的影響伺服器MySql
- 影響Oracle標量子查詢效能的三個因素Oracle
- 前端優化系列 – 初始化的效能影響分析前端優化
- 到底是什麼特徵影響著CNN的效能?特徵CNN
- 前端優化系列 - 初始化的效能影響分析前端優化
- elasticsearch的Java Heap Size設定大於32G對效能的影響因素列舉ElasticsearchJava
- postgresql無序uuid效能測試SQLUI
- 填報表如何生成 UUID 標識UI
- mybatis新增物件自動生成uuid方案MyBatis物件UI
- 生成性人工智慧支援教師專業發展:對高階思維和自我效能的影響人工智慧
- 伺服器核心硬體的效能如何影響伺服器的整體效能?伺服器
- .net core 拋異常對效能影響的求證之路
- 小心在 Blade 模板裡的大量 include 將會影響效能
- 大型網站的HTTPS實踐(三)——HTTPS對效能的影響網站HTTP
- 【效能】Oracle表並行對邏輯遷移後查詢效能的影響Oracle並行
- 影響雲伺服器效能的主要因素有哪些?伺服器
- 關於資料庫開啟大頁對效能的影響資料庫
- Sort_Buffer_Size 設定對伺服器效能的影響伺服器
- Guuid: 由 Go 語言開發的 UUID 生成服務UIGo