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】生成UUIDJavaUI
- JAVA 異常對於效能的影響Java
- 哪些因素影響Java呼叫的效能?Java
- Java教程:影響MySQL效能的配置引數JavaMySql
- 影響Java EE效能的十大問題Java
- Java中的Exception拋異常對效能的影響 - BaeldungJavaException
- [zt] 影響SQL效能的原因SQL
- 影響mysql效能的因素都有哪些MySql
- 影響HTTP效能的常見因素HTTP
- 影響MySQL效能的硬體因素MySql
- 影響MySQL效能的硬體因MySql
- oracle生成uuidOracleUI
- session效能的影響,後臺 flush dirtySession
- SQL Server效能影響的重要結論SQLServer
- 批操作效能影響診斷
- uuid自動生成UI
- 可笑,你竟然不知道 Java 如何生成 UUIDJavaUI
- DB2 HADR對效能的影響DB2
- InnoDB 隔離模式對 MySQL 效能的影響模式MySql
- Java 實現的SnowFlake生成UUID (Java程式碼實戰-007)JavaUI
- MySQL影響伺服器效能的幾個方面MySql伺服器
- 分支對程式碼效能的影響和優化優化
- 影響儲存網路效能的因素有哪些?
- JavaScript 事件對記憶體和效能的影響JavaScript事件記憶體
- mysql刪除和更新操作對效能的影響MySql
- 影響你網站效能的 5 個瓶頸網站
- 磁碟排序對Oracle資料庫效能的影響排序Oracle資料庫
- 硬體環境對系統效能的影響
- try catch 對程式碼執行的效能影響
- 影響OLTP 系統效能的儲存因素解析
- 測試SQLPLUS的ARRAYSIZE對效能的影響SQL
- Arraysize的設定以及對查詢效能的影響
- css屬性的選擇對動畫效能的影響CSS動畫
- MySQL null值儲存,null效能影響MySqlNull
- 前端優化系列 – 初始化的效能影響分析前端優化
- 伺服器IO瓶頸對MySQL效能的影響伺服器MySql
- 到底是什麼特徵影響著CNN的效能?特徵CNN
- 磁碟排序對Oracle資料庫效能的影響PT排序Oracle資料庫