vm本地存儲無法訪問
1. VMware vSAN分布式存儲安裝配置
在進行VMware vSAN分布式存儲的安裝配置時,首先要了解環境信息。管理地址包括AD和vCenter,如192.168.1.254和192.168.1.200,而ESXi主機分布在192.168.1.201至192.168.1.204,且每個主機需配置一個用於數據傳輸的VSAN vmkernel埠,建議使用至少1G,推薦10G乙太網絡。
組建VSAN集群需3-8個主機,這里使用4個ESXi主機。每個ESXi主機至少需一塊SSD和一塊機械硬碟,且是本地存儲,獨立安裝ESXi系統。配置兩塊專用網卡用於vSAN網路,如vmotion、VSAN和管理網路共享。
在vCenter中,依次添加ESXi主機,輸入IP、用戶和密碼,驗證SSL證書,分配許可證書(評估模式),並可啟用主機鎖定模式。指定虛擬機的清除位置,完成四個主機的添加。
接下來配置vSAN網路,選擇VMkernel適配器,啟用vMotion,添加網路標簽並輸入內部通信IP,配置完成後,為其他主機重復。模擬SSD時,需手動指定硬碟為SSD。創建集群時,選擇「手工」模式,分配許可證,創建磁碟組,並指定SSD作為數據緩存和數據磁碟。
應用虛擬機存儲策略,創建策略並選擇存儲磁碟組。在創建虛擬機時,選擇存儲策略並確保其合規。最後,測試VSAN功能,如vmotion遷移和HA恢復,確保數據的冗餘和災備能力。
2. 在新建虛擬機時出現問題
JConsole
JConsole 圖形用戶界面是一種符合 java 管理擴展(JMX)規范的監視工具。JConsole 使用 Java 虛擬機 (Java VM) 的廣泛檢測來提供有關在 Java 平台上運行的應用程序的性能和資源消耗的信息。
使用方法 本地
使用jconsole命令:監視本地運行的所有 Java 應用程序,JConsole 可以連接到這些應用程序。
使用jconsole PID命令:監視指定PID的Java應用程序。
- 獲取java PID的方法:通過任務管理器查看、通過Java提供的jps命令查看。遠程
概述:顯示有關 Java VM 和受監視值的概述信息。
內存:顯示有關內存使用的信息。
線程:顯示有關線程使用的信息。
類:顯示有關類載入的信息。
VM:顯示有關 Java VM 的信息。
MBeans:顯示有關 MBeans 的信息。
- 組成部分 概覽
伊甸園空間(堆):最初為大多數對象分配內存的池。
倖存者空間(堆):包含在伊甸園空間垃圾回收中倖存下來的物體的池。
終身代(堆):包含在倖存者空間中存在一段時間的對象的池。
永久生成(非堆):包含虛擬機本身的所有反射數據的池,如類和方法對象。使用類數據共享的 Java VM,這一代分為只讀和讀寫區域。
代碼緩存(非堆):HotSpotJava VM 還包括一個代碼緩存,其中包含用於編譯和存儲本機代碼的內存。
- 堆和非堆內存
堆內存是Java VM為所有類實例和數組分配內存的運行時數據區域。堆的大小可能是固定的或可變的。垃圾回收器是一個自動內存管理系統,用於回收對象的堆內存。
非堆內存包括所有線程之間共享的方法區域和Java VM的內部處理或優化所需的內存。它存儲每類結構,如運行時常量池、欄位和方法數據,以及方法和構造函數的代碼。方法區域在邏輯上是堆的一部分,但是,根據實現,Java VM 可能不會對它進行垃圾回收或壓縮。與堆內存一樣,方法區域可能為固定大小或可變大小。方法區域的內存不需要連續。
- 內存池和內存管理器
內存池表示Java VM管理的內存區域。Java VM至少有一個內存池,它可能會在執行期間創建或刪除內存池。內存池可以屬於堆內存或非堆內存。
內存管理器管理一個或多個內存池。垃圾回收器是一種內存管理器,負責回收不可到達的對象使用的內存。Java VM可能具有一個或多個內存管理器。它可以在執行期間添加或刪除內存管理器。內存池可以由多個內存管理器管理。
- 垃圾回收
它們創建許多壽命較短的對象,例如迭代器和局部變數。
它們創建一些壽命很長的對象,例如高級持久對象。
- 線程
查找監視器死鎖線程:檢測對象監視器鎖上是否有任何線程死鎖。此操作返回死鎖線程指示的數組。
getThreadInfo:返回線程信息。這包括線程當前被阻止的名稱、堆棧跟蹤和監視器鎖(如果有)以及持有該鎖的線程以及線程爭用統計信息。
獲取ThreadCpu時間:返回給定線程消耗的 CPU 時間
class:顯示有關類載入器行為的統計信息。
compiler:顯示有關Java HotSpot VM實時編譯器行為的統計信息。
gc:顯示有關垃圾回收堆行為的統計信息。
gccapacity:顯示有關幾代人容量及其相應空間的統計信息。
gccause:顯示有關垃圾回收統計信息(與 相同)的摘要,以及最後和當前(如果適用)垃圾回收事件的原因。-gcutil
gcnew:顯示新一代行為的統計信息。
gcnewcapacity:顯示有關新一代大小及其相應空間的統計信息。
gcold:顯示有關舊一代和元空間統計信息行為的統計信息。
gcoldcapacity:顯示有關舊一代大小的統計信息。
gcmetacapacity:顯示有關元空間大小的統計信息。
gcutil:顯示有關垃圾回收統計信息的摘要。
printcompilation:顯示 Java 熱點 VM 編譯方法統計信息。
-nr當找不到現有的RMI注冊表時,不嘗試使用jstatd進程創建一個內部的RMI注冊表。
-p port在指定的埠查找RMI注冊表。如果沒有找到,並且沒有指定-nr選項,則在該埠自行創建一個內部的RMI注冊表。
-n rminameRMI注冊表中綁定的RMI遠程對象的名稱。默認的名稱為JStatRemoteHost。如果多個jstatd伺服器在同一主機上運行,你可以通過指定該選項來讓每個伺服器導出的RMI對象具有唯一的名稱。不管如何,這樣做需要將唯一的伺服器名稱包含進監控客戶端的hostid和vmid字元串中。
-Joption將選項參數傳遞給被javac調用的java啟動程序。例如,-J-Xms48m設置啟動內存為48 MB。使用-J將選項參數傳遞給執行Java應用程序的底層虛擬機,這是一種常見慣例。
pid對應jvm的進程id
executable core產生core mp文件
[server-id@]remote server IP or hostname遠程的ip或者hostname,server-id標記服務的唯一性id
no option輸出全部的參數和系統屬性
-flag name輸出對應名稱的參數
-flag [+|-]name開啟或者關閉對應名稱的參數
-flag name=value設定對應名稱的參數
-flags輸出全部的參數
-sysprops輸出系統屬性
- 注意:jinfo雖然可以在java程序運行時動態地修改虛擬機參數,但並不是所有的參數都支持動態修改
built-in變數
it -- 當前的迭代元素
index -- 當前迭代元素的索引
array -- 被迭代的數組
built-in變數
lhs -- 左邊元素
rhs -- 右邊元素
pid:目標進程的PID,進程編號,可以採用ps -ef | grep java查看java進程的PID;
executable:產生core mp的java可執行程序;
core:將被列印信息的core mp文件;
remote-hostname-or-IP:遠程debug服務的主機名或ip;
server-id:唯一id,假如一台主機上多個遠程debug服務;
jmap -mp:[live,]format=b,file= PID:使用hprof二進制形式,輸出jvm的heap內容到文件
jmap -finalizerinfo PID:列印正等候回收的對象的信息
jmap -heap PID:列印heap的概要信息,GC使用的演算法,heap(堆)的配置及JVM堆內存的使用情況。
jmap -histo:live PID:列印每個class的實例數目,內存佔用,類全名信息。VM的內部類名字開頭會加上前綴」*」. 如果live子參數加上後,只統計活的對象數量.
jmap -permstat PID:列印classload和jvm heap長久層的信息. 包含每個classloader的名字、活潑性、地址、父classloader和載入的class數量。另外,內部String的數量和佔用內存數也會列印出來。
-F強迫.在pid沒有相應的時候使用-mp或者-histo參數。在這個模式下,live子參數無效。
-h | -help列印輔助信息
-J傳遞參數給jmap啟動的jvm.
- jstack
-F強制mp線程堆棧信息. 用於進程hung住,jstack命令沒有響應的情況
-m同時列印java和本地(native)線程棧信息,m是mixed mode的簡寫
-l列印鎖的額外信
- 作者:楚瑞濤 https://blog.csdn.net/cong____cong/article/details/106349866
使用jsconsole hostName:portNum命令:hostName是運行應用程序的系統的名稱,portNum是您在啟動Java VM時啟用 JMX 代理時指定的埠號。
使用service:jmx::命令:使用 JMX 服務 URL 進行連接。
內容分析
將 JConsole 連接到應用程序後,JConsole 由六個選項卡組成。
顯示有關 CPU 使用情況、內存使用情況、線程計數和在Java VM中載入的類的圖形監視信息。
提供執行GC的操作,可以隨時點擊按鈕進行垃圾回收
Java VM管理兩種類型的內存:堆內存和非堆內存,這兩種內存都是在 Java VM 啟動時創建的。
內存池和內存管理器是Java VM內存系統的關鍵方面。
垃圾回收 (GC) 是Java VM釋放不再引用的對象佔用的內存的方式。通常認為具有活動引用為"活動"且未引用(或無法訪問)對象的對象為"已死"。垃圾回收是釋放死對象使用的內存的過程。GC 使用的演算法和參數對性能有顯著影響。
Java hotspot VM垃圾回收器使用代數 GC。生成 GC 利用大多數程序符合以下概括的觀察。
提供有關線程使用的信息。
顯示有關類載入的信息。
提供有關Java VM的信息。
以通用方式顯示有關在平台 MBean 伺服器注冊的所有 MBeans 的信息。MBeans 選項卡允許您訪問平台 MXBean 檢測的完整集,包括在其他選項卡中不可見的儀器。此外,您還可以使用 MBeans 選項卡監視和管理應用程序的 MBeans。
列出目標系統上已檢測的 Java 虛擬機 (JVM)。
監視 Java 虛擬機 (JVM) 統計信息。
對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控。
命令格式
jstat [-option] [PID]
option參數
1.jstat –class: 顯示載入class的數量,及所佔空間等信息。
2.jstat -compiler顯示VM實時編譯的數量等信息。
3.jstat -gc: 可以顯示gc的信息,查看gc的次數,及時間。
4.jstat -gccapacity:可以顯示,VM內存中三代(young,old,perm)對象的使用和佔用大小
5.jstat -gcutil:統計gc信息
6.jstat -gcnew:年輕代對象的信息。
7.jstat -gcnewcapacity: 年輕代對象的信息及其佔用量。
8.jstat -gcold:old代對象的信息。
9.jstat -gcoldcapacity: old代對象的信息及其佔用量。
10.jstat -gcpermcapacity: perm對象的信息及其佔用量。
11.jstat -printcompilation:當前VM執行的信息。
監視 Java 虛擬機 (JVM),並使遠程監視工具能夠連接到 JVM
命令格式
jstatd -[option]
option
使用方法
1.在jdk的bin目錄下創建文件jstatd.all.policy
2.寫入下面的安全配置
grant codebase "file:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/lib/tools.jar" {
permission java.security.AllPermission;
#此處寫絕對路徑,主要是防止路徑錯誤問題,排查問題,應該寫成相對路徑
3.啟動jstatd
./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=x.x.x.x &
4.使用jvisualvm工具遠程連接,進行監控
jvisualvm
VisualVM,能夠監控線程,內存情況,查看方法的CPU時間和內存中的對 象,已被GC的對象,反向查看分配的堆棧(如100個String對象分別由哪幾個對象分配出來的).
同時他還提供很多插件可以自己安裝,是一款不錯的監控分析工具。
故障排除工具 JInfo
可以用來查看正在運行的 java 應用程序的擴展參數,包括Java System屬性和JVM命令行參數;也可以動態的修改正在運行的 JVM 一些參數。當系統崩潰時,jinfo可以從core文件裡面知道崩潰的Java應用程序的配置信息
命令格式
參數說明
option
Javacore 概述
Javacore,也可以稱為「threadmp」或是「javamp」,它是 Java 提供的一種診斷特性,能夠提供一份可讀的當前運行的 JVM 中線程使用情況的快照。即在某個特定時刻,JVM 中有哪些線程在運行,每個線程執行到哪一個類,哪一個方法。應用程序如果出現不可恢復的錯誤或是內存泄露,就會自動觸發 Javacore 的生成。
使用方法
1.jinfo pid:輸出當前 jvm 進程的全部參數和系統屬性
2.jinfo -flag name pid:輸出對應名稱的參數使用該命令,可以查看指定的 jvm 參數的值。如:查看當前 jvm 進程是否開啟列印 GC 日誌。
3.jinfo -flag [+|-]name pid:開啟或者關閉對應名稱的參數
使用 jinfo 可以在不重啟虛擬機的情況下,可以動態的修改 jvm 的參數。尤其在線上的環境特別有用。
4.jinfo -flag name=value pid:修改指定參數的值。
5.jinfo -flags pid:輸出全部的參數
6.jinfo -sysprops pid:輸出當前 jvm 進行的全部的系統屬性
jhat
主要是用來分析java堆的命令,可以將堆中的對象以html的形式顯示出來,包括對象的數量,大小等等,並支持對象查詢語言。
1.使用jmap命令導出堆文件jmap -mp:live,file=a.log pid
也可以使用下面方式導出堆文件
1、使用jconsole選項通過HotSpotDiagnosticMXBean從運行時獲得堆轉儲(生成mp文件)、
2、虛擬機啟動時如果指定了-XX:+HeapDumpOnOutOfMemoryError選項, 則在拋出OutOfMemoryError時, 會自動執行堆轉儲。
3、使用hprof命令
2.使用jhat分析堆文件jhat -J-Xmx512M a1.log
3.查看分析的html頁面
http://ip:7000/jhat中的OQL(對象查詢語言)
如果需要根據某些條件來過濾或查詢堆的對象,這是可能的,可以在jhat的html頁面中執行OQL,來查詢符合條件的對象
基本語法:
select
[from [instanceof] ]
[where ]
解釋:
(1)class name是java類的完全限定名,如:java.lang.String,java.util.ArrayList, C是char數組,java.io.File是java.io.File[]
(2)類的完全限定名不足以唯一的辨識一個類,因為不同的ClassLoader載入的相同的類,它們在jvm中是不同類型的
(3)instanceof表示也查詢某一個類的子類,如果不明確instanceof,則只精確查詢class name指定的類
(4)from和where子句都是可選的
(5)java域表示:obj.field_name;java數組表示:array[index]
舉例:
(1)查詢長度大於100的字元串
select s from java.lang.String s where s.count > 100
(2)查詢長度大於256的數組
select a from [I a where a.length > 256
(3)顯示匹配某一正則表達式的字元串
select a.value.toString() from java.lang.String s where /java/(s.value.toString())
(4)顯示所有文件對象的文件路徑
select file.path.value.toString() from java.io.File file
(5)顯示所有ClassLoader的類名
select classof(cl).name from instanceof java.lang.ClassLoader cl
(6)通過引用查詢對象
select o from instanceof 0xd404d404 o
built-in對象 -- heap
(1)heap.findClass(class name) -- 找到類
select heap.findClass("java.lang.String").superclass
(2)heap.findObject(object id) -- 找到對象
select heap.findObject("0xd404d404")
(3)heap.classes -- 所有類的枚舉
select heap.classes
(4)heap.objects -- 所有對象的枚舉
select heap.objects("java.lang.String")
(5)heap.finalizables -- 等待垃圾收集的java對象的枚舉
(6)heap.livepaths -- 某一對象存活路徑
select heaplivepaths(s) from java.lang.String s
(7)heap.roots -- 堆根集的枚舉
辨識對象的函數
(1)classof(class name) -- 返回java對象的類對象
select classof(cl).name from instanceof java.lang.ClassLoader cl
(2)identical(object1,object2) -- 返回是否兩個對象是同一個實例
select identical(heap.findClass("java.lang.String").name, heap.findClass("java.lang.String").name)
(3)objectid(object) -- 返回對象的id
select objectid(s) from java.lang.String s
(4)reachables -- 返回可從對象可到達的對象
select reachables(p) from java.util.Properties p -- 查詢從Properties對象可到達的對象
select reachables(u, "java.net.URL.handler") from java.net.URL u -- 查詢從URL對象可到達的對象,但不包括從URL.handler可到達的對象
(5)referrers(object) -- 返回引用某一對象的對象
select referrers(s) from java.lang.String s where s.count > 100
(6)referees(object) -- 返回某一對象引用的對象
select referees(s) from java.lang.String s where s.count > 100
(7)refers(object1,object2) -- 返回是否第一個對象引用第二個對象
select refers(heap.findObject("0xd4d4d4d4"),heap.findObject("0xe4e4e4e4"))
(8)root(object) -- 返回是否對象是根集的成員
select root(heap.findObject("0xd4d4d4d4"))
(9)sizeof(object) -- 返回對象的大小
select sizeof(o) from [I o
(10)toHtml(object) -- 返回對象的html格式
select "+ toHtml(o) + "" from java.lang.Object o
(11)選擇多值
select {name:t.name?t.name.toString():"null",thread:t} from instanceof java.lang.Thread t
數組、迭代器等函數
(1)concat(enumeration1,enumeration2) -- 將數組或枚舉進行連接
select concat(referrers(p),referrers(p)) from java.util.Properties p
(2)contains(array, expression) -- 數組中元素是否滿足某表達式
select p from java.util.Properties where contains(referres(p), "classof(it).name == 'java.lang.Class'")
返回由java.lang.Class引用的java.util.Properties對象
(3)count(array, expression) -- 滿足某一條件的元素的數量
select count(heap.classes(), "/java.io./(it.name)")
(4)filter(array, expression) -- 過濾出滿足某一條件的元素
select filter(heap.classes(), "/java.io./(it.name)")
(5)length(array) -- 返回數組長度
select length(heap.classes())
(6)map(array,expression) -- 根據表達式對數組中的元素進行轉換映射
select map(heap.classes(),"index + '-->' + toHtml(it)")
(7)max(array,expression) -- 最大值, min(array,expression)
select max(heap.objects("java.lang.String"),"lhs.count>rhs.count")
(8)sort(array,expression) -- 排序
select sort(heap.objects('[C'),'sizeof(lhs)-sizeof(rhs)')
(9)sum(array,expression) -- 求和
select sum(heap.objects('[C'),'sizeof(it)')
(10)toArray(array) -- 返回數組
(11)unique(array) -- 唯一化數組
jmap
列印進程、核心文件或遠程調試伺服器的共享對象內存映射或堆內存詳細信息。
jmap [option]
(to connect to running process) 連接到正在運行的進程
jmap [option]
(to connect to a core file) 連接到核心文件
jmap [option] [server_id@]
(to connect to remote debug server) 連接到遠程調試服務
option
使用方法
jstack命令主要用於調試java程序運行過程中的線程堆棧信息,可以用於檢測死鎖,進程耗用cpu過高報警問題的排查。jstack命令會列印出所有的線程,包括用戶自己啟動的線程和jvm後台線程。
命令格式
jstack -[option] pid
option
公眾號「Java精選」所發表內容註明來源的,版權歸原出處所有(無法查證版權的或者未註明出處的均來自網路,系轉載,轉載的目的在於傳遞更多信息,版權屬於原作者。如有侵權,請聯系,筆者會第一時間刪除處理!
最近有很多人問,有沒有讀者交流群!加入方式很簡單,公眾號Java精選,回復「加群」,即可入群!
(微信小程序):3000+道面試題,包含Java基礎、並發、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構設計等,在線隨時刷題!
------ 特別推薦 ------
特別推薦:專注分享最前沿的技術與資訊,為彎道超車做好准備及各種開源項目與高效率軟體的公眾號,「大咖筆記」,專注挖掘好東西,非常值得大家關注。點擊下方公眾號卡片關注。
文章有幫助的話,在看,轉發吧!
3. 黑莓8700g 錯誤代碼
在BLACKBERRY黑莓手持設備上java虛擬機可能出現的錯誤代碼和詳細信息101 Previous startup failed
當jvm啟動過程中,前一個啟動的項目失敗了,設備已經被重置。這個錯誤表明jvm在啟動時找到「啟動進行中」這個標志位已經設置了,當前屏幕信息為:有意停止「系統繼續重置」這個死循環,來糾正系統當前不正確的啟動操作
102 Invalid code in filesystem
在文件系統中發現無效的代碼。手持設備的系統檢查.cod文件的變動時,在一些.cod文件中檢測到這個問題。他肯可能是表明生成過程中發生了錯誤,即在cod文件中存在一個有問題的簽名。如果一些用戶操作設備導致這個問題的發生,文件系統的代碼被破壞,復位的周期將是連續循環的。唯一的恢復方法是擦去設備並且恢復一個新的系統。
103 Cannot find starting address
找不到啟動的地址,用於啟動系統的引導cod文件找不到。這個錯誤表明一個用於引導系統的cod文件沒有安裝到設備上,或者格式不正確。
104 Uncaught: <Java-type-name>
非預期:《java模塊名》jvm診斷出一個非預期的java代碼異常錯誤拋出,程序可以繼續執行,或者手持設備可以用桌面管理器連是USB線安裝一個程序調試器來查看這些錯誤信息。事件日誌里應該包含了異常錯誤的信息
105 Example, DbRecSize
舉例,DbRecSize文件系統API已經為一種特定的操作返回一種錯誤狀態碼,他可能表明在jvm上存在一個無效的或者錯誤的文件系統
106 Graphics system error
圖形系統錯誤,在設備的圖形系統里一個錯誤發生並被檢測到
107 operator new() called
在jvm里,操作new()回調一個c++類,該函數代碼沒有被正確的從VMRamObject對象來繼承,新操作符需要被正確的繼承。提取當前的(-後復位)的BUGDISP
108 operator delete() called
在jvm里,操作delete
()回調一個c++類,,該函數代碼沒有被正確的從VMRamObject對象來繼承,新操作符需要被正確的繼承。提取當前的(-後復位)的BUGDISP
109 PriorityMessageCount error: <priority-count>
優先順序統計信息計算錯誤:
<優先順序計算>當它應該總大於或者等於零時,RimPriorityMessageCount返回的值是負的。這表明在系統中這是一個錯誤。
提取當前(-後復位)的BUGDISP和查看系統事件記錄
110 Non-idle event downtime error: <down-time> <idle-down-time>
非空閑狀態時間事件錯誤:<時間> <空閑時間>在jvm空閑時間統計時檢測到一個錯誤,代表JVM空閑了很長時間。
這通常表明在手持設備或者JVM中發生一個錯誤。如果計數器空閑了400天以上的設備時間,他也可能出現。
111 Font engine error
字體引擎錯誤:一個系統設備的字體引擎錯誤檢測到。請查看當前的BUGDISP和事件日誌
112 Java Native Assertion Failure
Java本地化實例失敗。一個本地化代碼錯誤檢測到。請查看當前的BUGDISP和事件日誌
200 應用程序管理器拋出一個非預期的線程異常錯誤,程序無法繼續執行。重新復位手持設備。
201 Crypto initialization code failed
Crypto初始化代碼失敗。Crypto模塊初始化失敗手持設備無法繼續
202 在密匙存儲上檢測到一個破解攻擊行為,程序無法繼續
203 Console process died
控制台進程死亡。應用程序管理器控制台進程已經掛起。這看起來非常象執行程序時發生異常錯誤的現象
204 Persistent Content Exception
本地內存內容異常。一個應用程序試圖提交一個文本對象到本地內存里。這個情況將僅僅發生在:如果內容保護服務打開了,然後一個進程試圖保存一些文本標記數據在本地內存里。當這個異常沒有被正確處理過,可能說明本地內存已經處於損壞的狀態。我們需要重設和回滾到最後正常狀態的提交點。說明:這個jvm異常反映了在Java代碼里有一個錯誤的地方,Jvm僅僅只是簡單的診斷這個錯誤。如果這不是jvm的問題,那麼事件日誌將包含足夠的Java代碼錯誤信息。
300-303 Bad load
無效的載入持續,運行應用程序載入器重新給手持設備載入操作系統和應用程序
310-314 Hardware failure
硬體錯誤。嘗試硬復位手持設備:關機,拿掉電池,等待一會兒,換掉電池看看設備重新啟動時會出現什麼狀況,或者運行應用程序載入器重新給手持設備載入操作系統和應用程序。注意:如果這些辦法沒有解決這個錯誤,請聯系你的服務提供商
320-325 AMX failure
AMX 失敗。請運行應用程序載入器重新給手持設備載入操作系統和應用程序
330-339 Application tasks failure
應用程序任務失敗。請運行應用程序載入器重新給手持設備載入操作系統和應用程序
340-343 Memory failure
內存錯誤。您可能看到手持設備報告如下錯誤代碼:
Device Error 340
Device Error 341
Device Error 342
Device Error 343
原因:內存錯誤
解決:減少你手機里日歷約會同步的個數
1、在桌面管理器里,雙擊Intellisync圖標,點擊配置PIM按鈕
2、在設備應用程序列表中,選擇日歷
3、點擊配置,高級設置,
4、在數據范圍選項頁,完成其中的一個任務來減少你手機里日歷約會同步的個數,如果你選擇了「調度最佳未來項目選擇」的選項,手持設備僅僅只是同步未來的日歷約會,如果你點擊並輸入了一個日期范圍的調度項目選項,手持設備僅僅只是同步在選擇日期范圍內的日歷計劃約會.
5、點擊OK保存改變,關閉窗口
6、在配置窗口,確定日歷程序的復選框選擇了,點擊OK
7、在Intellisync窗口,確認同步PIM復選框已經選擇了,然後點擊立即同步。設備會減少至少一個以上的日歷約會項目。
如果你仍然看到這個錯誤信息。請運行應用程序載入器重新給手持設備載入操作系統和應用程序
350-359 Software application failure
應用程序軟體錯誤,您可能看到手持設備報告如下錯誤代碼:
Device Error 350
Device Error 352
Device Error 353
Device Error 354
Device Error 355
Device Error 356
Device Error 357
Device Error 358
Device Error 359
原因:應用程序軟體錯誤
解決方案:嘗試硬復位手持設備,運行應用程序載入器重新給手持設備載入操作系統和應用程序。在向導窗口,不要選擇任何第三方應用程序。在高級選項里,選擇清除當前所有已安裝的應用程序復選框。
360-363 Flash memory failure
Flash內存錯誤。嘗試硬復位手持設備,運行應用程序載入器重新給手持設備載入操作系統和應用程序。
365-368 This one is often followed by 「OHHH @%!!」
這是一個經常跟隨 「OHHH @%!!」出現的錯誤,請聯系服務提供商
395 Unclassified error code
未分類的錯誤代碼
原因:
設備395代碼表明是一個未分類的錯誤代碼。手持設備安裝了第三方應用程序可能導致了這個錯誤產生
解決方案1
嘗試硬復位手持設備:關機,拿掉電池,等待一會兒,換掉電池看看設備重新啟動時會出現什麼狀況
解決方案2
清除和重新載入手持設備的數據
1、在黑莓桌面管理器里,用備份和還原工具創建你的手機的數據備份文件。如需更多信息,請參考桌面管理器在線幫助里的「手持設備備份信息」。警告:下面的步驟可能清除手持設備的數據
2、打開桌面管理器,雙擊應用程序載入器圖標
3、單擊下一步,出現應用程序選擇窗口
4、確認必須的應用程序已經選擇了,點擊下一步
5、點擊「高級」
6、選擇「清除所有的應用程序數據和當前已經安裝的應用程序」玄虛,點擊下一步
7、點擊完成。當手持設備的操作系統和應用程序重新載入時,手持設備的數據被清除,
8、使用備份和還原工具從備份的數據文件還原到手持設備中,如需更多信息,請參考桌面管理器在線幫助里的「手持設備還原信息」。
400-564 Page faults
頁面文件失效。運行應用程序載入器重新給手持設備載入操作系統和應用程序
410 Radio failure
無線電服務失敗。
嘗試硬復位手持設備,運行應用程序載入器重新給手持設備載入操作系統和應用程序。注意:如果這樣都沒有解決這個錯誤,請請聯系服務提供商
Error:411=電池模塊問題,更換電池
Error:499=軟體問題,重啟手持設備.
501 VM_THREAD_SWITCHED
線程已經被切換,內部錯誤,這是在VM中被內部使用的一個錯誤返回信息。它應該從會不報告為一個設備錯誤代碼。
502 VM_PROCESS_DEATH
進程已死(掛起),所有的進程已經退出,最後一個java進程已被終止,沒有任何程序可以執行
503 VM_THREAD_DEATH
線程已死(掛起),內部錯誤,這是在VM中被內部使用的一個錯誤返回信息。它應該從不會報告為一個設備錯誤代碼
504 VM_THREAD_SWITCH
線程已經被切換,內部錯誤,這是在VM中被內部使用的一個錯誤返回信息。它應該從不會報告為一個設備錯誤代碼
505 VM_BAD_CODE5 I
無效的代碼:無效位元組代碼,在Jit編譯器里發生一個錯誤
506 Uncaught Exception
未知的異常:在初始化VM的java線程的時候一個未知的java異常被拋出,導致了系統被迫結束了唯一活動的線程。事件日誌包含了異常的回滾記錄!
507 Unsatisfied Link
在cod文件里有不合適的文件鏈接關聯,可能丟失了cod文件,(原文的英文是如此)
Device Error 5059
Device Error 5077
手持設備沒有安裝任何應用程序
原因1
當應用程序載入器工作時,黑莓設備上存在的應用程序已經被清除,但應用程序載入器載入新的應用程序時失敗了
解決方案
1、確認你的電腦上已經正確安裝了設備軟體
2、請直接將您的黑莓設備直接連接到一台筆記本電腦的USB介面處
3、如果第三方程序(如:殺毒軟體)已經使用了和桌面管理器手持設備的相同的COM埠,關閉第三方程序來釋放COM埠
4、如果你使用USB數據線鏈接黑莓設備到你的電腦的串口,請用USB埠直接鏈接bb
5、在桌面管理器里,雙擊應用程序載入器
6、用應用程序載入器安裝設備系統軟體
原因2
如果你輸入密碼錯誤超過10次,你bb上所有的數據和程序都會被清除
解決
1、在桌面管理器里,雙擊應用程序載入器
2、用應用程序載入器安裝設備系統軟體
508 Invalid object
無效的對象,當vm執行一個調試器命令時檢測到一個問題:無效的對象
509 VM_PPO_INFINITE_LOOP
在垃圾手機的PPO階段中發現死循環,在GC的PPO階段中,最大的迭代總數必須是系統中的文件句柄的最大數字。這個錯誤表明這個迭代總數已經超過這個數,因而在PPO循環中或者不正確的文件系統中出現了一個瑕疵。在錯誤字元串中可以提取到一個特別的16進制整數值,是當前檢測到的死循環記錄的id值
510 Deadlock
死鎖,所有的線程對象都在等待,但一個線程返回結果時已經死鎖了。系統不能從這個死鎖狀態中恢復,因為所有的線程都被鎖定了。
511 Debug connection died
調試器連接已經死鎖,當調試的時候,vm的問題或者不正確的調試命令發送給vm時,可能導致這個問題發生
512 GC Aborted
GC(垃圾收集)已經終止,空間垃圾收集器程序被用戶操作事件強制終止了,諸如擠壓鍵盤或者移動滾輪操作
513 <clinit> needs running
<clinit>類需要先運行。此類名<clinit>能繼續執行之前要求執行一個opcode,。
514 <init> needs running
<init>需要運行。一個新的類實例在使用之前必須通過默認構造函數初始化和分配內存空間。
515 Object group too big
對象組太大。jvm不能正確的獲得對象組,不是因為對象太多就是因為對象組太大
516 Persistent ids exhausted
ids固件設備衰竭。當訪問一個固件對象時,jvm發現這個本地內存id計數器已經達到最大限制。對象不能被提交,同時報告一個致命的錯誤。這個錯誤可能從不會發生,除非這個設備大量使用了數年之久。
517 Filesystem corrupt
文件系統不正確。在jvm本地內存里檢測到一個錯誤(矛盾)的分配地址
518 Unexpected longjmp5
意外的longjmp指令。一個垃圾收集器指令方面結束了一個longjmp指令。這可能表明當指令沒有中斷即將完成操作時,這個標記階段被這個錯誤中斷了。這個情況應該從不會發生,因為當設備非空閑的時候,這些操作會被執行,同時,
僅僅當設備空閑時,垃圾收集器的工作才會被中斷
519 Internal Error
內部伺服器錯誤。Jvm系統丟失或者被禁止
520 Internal Return
內部返回一個錯誤,表明一個java方法返回的一種內部的狀態需要執行
521 Dangerous Wait An Object
一個危險的等待對象。一個線程執行Wait()方法時被另外一個對象鎖定。這個僅僅在基於jvm的模擬器里控制調試應用程序切換時才會檢查
522 Interlaced synchronization
互動式同步錯誤,對象的線程已經通過一個命令獲得了2個鎖定,但是,這2個已經取得的鎖定類型並不匹配線程被鎖定之前的命令。這表明一個即將發生潛在的死鎖情況被報告。這個僅僅在基於jvm的模擬器里控制調試應用程序切換時才會檢查
523 System process died
系統進程已死(掛起)。一個致命的java程序錯誤導致系統已經被終止,設備無法繼續正常的操作,請復位重新啟動手持設備。
524 LMM error
LMM錯誤。一個對象被低內存管理器作了回收標記,但內存垃圾收集時他沒有被正確釋放。這個僅僅在基於jvm的模擬器里控制調試應用程序切換時才會檢查
525 Bad persistent object
損壞的本地內存對象。當垃圾收集期間,從本地內存根目錄檢測到一個自動操作提交到了一個非持久本地對象,這個類型的對象已經記錄到事件日誌里了
526 java.lang.Object not found
類定義java.lang.Object對象未找到。
527 java.lang.String not found
類定義java.lang.String對象未找到
528 –529 Corrupt filesystem
錯誤的文件系統。不可恢復的錯誤,繼續執行的話將會導致所有數據丟失。這個錯誤信息包含了內部「錯誤原因」的數字代碼。如果刪除了一個cod文件,這個錯誤不會診斷出來,因為JVM
必須刪除(在已經刪除了的)COD 文件中被定義的對象,因此,在設備正常操作時這個錯誤不會產生
jvm編譯器常見錯誤代碼
1.根數組引用不是有效的數組引用
2.根數組類型不是Object[]
3.根數組大小小於1,如Object[0]
4. root[0]里的內存不是有效的引用
5. root[0]類型不是一個長整型哈希表
6.數組頭部段包含一個無效的引用
7. 在本地Object[]的一個項目中包含一個無效的引用
8.一個對象類型引用了一個未知的cod文件
9.在內存里,一個cod文件中的對象的類型描敘文件大小不匹配
10. 一個對象裡面有一個無效的類型欄位引用
11.對象中一個引用的類型欄位鏈接到了另一對象的無效類型
12.在描敘符中一個本地Object[]丟失!
13.在本地內存中對象沒有被標記為persis表
14.根數組被分割,一個分隔段無效
530 VM_PREVENT_GC_OVERFLOW
_preventGC 溢出。原始對象的固定值會被保護起來防止被垃圾收集器收走。這個錯誤表明,
數值可能超出了被保護對象的固定的極限。如果設備被重置或者線程回滾事件被記錄,這個實際的數值可以提取出來。
531 Flash exhausted
內存已經耗盡用完。jvm無法容許超出內存空間的某些操作。如果jvm無法完成分配需要的內存空間大小,將會報告這個錯誤
532 VM_ASSERTION_FAILED
維護任務失敗。通常,當設備沒有啟動允許維護狀態時,這個jvm錯誤一般不會被報告,模擬器在調試狀態時可能會報告這個錯誤,表明一個vm維護操作違反了約定。可以嘗試輸入BKPT來激活調試器,然後轉儲這個本地堆棧轉交給vm組
533 VM_RUN_METHOD
<method>方法需要使用國際標準的ECMAScript腳本調用方法才能運行
534 VM_FAST_RESET_DISABLED
快速復位被禁止。內部過去經常用這個代碼表示快速復位能力是無效的。請經常使用平台制定的代碼
535 VM_UNUSED_535
未使用的vm錯誤。錯誤535意味著內存溢出。導致535錯誤的一個原因可能是一個運行的線程內存溢出,導致虛擬內存線程計劃任務程序終止了。這個錯誤是已知的,發生在一個啟動的隊列期間,或如果主事件線程被停止了。
解決方案:
首先,硬啟動手持設備。如果不能解決問題,從你的載體獲得並安裝最新版的黑莓手持設備ROM軟體,然後,運行桌面管理器里的應用程序載入器更新手持設備。或者刪除一些鈴聲和主題文件等等以釋放存儲空間
536 VM_FAST_RESET_BAD_INSTANCE
vm快速復位實例檢查失敗。內部過去經常用這個代碼表示:vm結構跳過了錯誤的地址空間或者vm已經被破壞了
537 VM_FAST_RESET_BAD_HEAP
快速復位錯誤,堆檢查失敗。內部過去經常用這個代碼表示:vm堆已經無效了,或者指針堆已經無效
538 VM_FAST_RESET_BAD_IRAM
快速復位IRAM損害,IRAM檢查失敗。內部過去經常用這個代碼表示:vm的IRAM檢查中檢測到寄存在IRAM中無效的vm數據結構(線程+本地堆棧),或者指針
539 VM_FAST_RESET_NOT_IDLE
快速復位狀態非空閑。內部過去經常用這個代碼表示:當復位發生時vm正忙,類似這樣的問題導致快速復位無法繼續
540 VM_FAST_RESET_MULTIPLE_RESETS
多重復位錯誤。內部過去經常用這個代碼表示:最近一次復位的時間小於最小復位時間間隔。由於禁止了短時間內多重復位次數,這個可以防止快速復位的死循環
541 VM_HEAP_COMPACT_INFINITE_LOOP
在堆壓縮中檢測到死循環。Vm在內存堆里檢測到一個問題,表明這個內存塊是無效的。當進行內存堆壓縮時,在確認一個可能的死循環時這個問題可以被檢測到,當設備包含了這個錯誤條件時,bugdisp記錄和事件日誌可以快速提取這個錯誤信息。如果可能的話,內存映像將會保存下來。
542 Transient memory leak
瞬間內存泄露。Jvm檢測到某些內存沒有被釋放,這表明發生了內存泄露。希望原因能夠盡早檢測出來,避免這個情況的發生
543 VM_FS_MISMATCH
文件系統不匹配。安裝了不兼容的java文件系統。Jvm檢測到現有的系統代碼和經常用於創建java文件系統的系統代碼有不同。這意味著java本地方法可能沒有被正確的編譯鏈接,所以,不能肯定系統的完整性。系統無法通過使用vm
DLFX和DLPS命令恢復,也不能刪除或修理本地內存的錯誤。這可能清除所有的數據和固件內容,請重新鏈接編譯文件系統,才能匹配新的系統代碼。恢復順序非常
重要:1.刪除應用程序,2.刪除本地內存內容,3.復位設備
544 VM_SECTION_MAP_OVERFLOW
一個模塊引用超過了255個其他模塊。Vm檢測到一個模塊試圖引用超過了255個其他的模塊。當錯誤檢測到的時候,文件系統應該立即獲取到該錯誤
545 VM_INCOMPATIBLE_FILESYS
Vm檢測到一個不兼容的或無效的文件系統存在。當錯誤檢測到的時候,文件系統應該立即獲取到該錯誤
546 VM_UNUSED_546
未使用(的內部錯誤代碼)。Vm檢測到文件系統中的內存映像是無效的(CRC冗餘檢查失敗),重新復位機器好過復制錯誤的內存
內容
547 VM_UNUSED_547
未使用(的內部錯誤代碼)。Vm錯誤
548 VM_UNUSED_548
未使用(的內部錯誤代碼)。Vm錯誤
549 VM_UNUSED_549
未使用(的內部錯誤代碼)。Vm錯誤