程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ksvcreate: Process(m000) creation failed,ksvcreatem000

ksvcreate: Process(m000) creation failed,ksvcreatem000

編輯:Oracle教程

ksvcreate: Process(m000) creation failed,ksvcreatem000


一測試服務器數據庫(Oracle Database 10g Release 10.2.0.5.0 - 64bit Production)突然訪問不了,檢查發現數據庫處於掛起模式(hang mode),檢查告警日志,發現有“ksvcreate: Process(m000) creation failed”,”kkjcre1p: unable to spawn jobq slave process“之類的錯誤信息。具體如下所示:

Sun Jan 17 09:56:05 CST 2016
Thread 1 advanced to log sequence 1729 (LGWR switch)
  Current log# 1 seq# 1729 mem# 0: /u01/oradata/SCM2/redo01.log
Sun Jan 17 21:34:01 CST 2016
Thread 1 advanced to log sequence 1730 (LGWR switch)
  Current log# 2 seq# 1730 mem# 0: /u01/oradata/SCM2/redo02.log
Mon Jan 18 09:06:00 CST 2016
ksvcreate: Process(m000) creation failed
Mon Jan 18 09:12:50 CST 2016
WARNING: inbound connection timed out (ORA-3136)
Mon Jan 18 09:37:13 CST 2016
Thread 1 advanced to log sequence 1731 (LGWR switch)
  Current log# 3 seq# 1731 mem# 0: /u01/oradata/SCM2/redo03.log
Mon Jan 18 09:43:10 CST 2016
kkjcre1p: unable to spawn jobq slave process 
Mon Jan 18 09:43:10 CST 2016
Errors in file /u01/app/oracle/admin/SCM2/bdump/scm2_cjq0_586.trc:

當時開發人員急著測試,沒時間給我研究具體原因,所以就重啟了數據庫實例(不能通過shutdown immeidate關閉,只能通過shutdown abort關閉)。

關於告警日志裡面的錯誤信息,我們看出m000進程創建失敗,PMON進程無法啟動該進程。一般情況下,PMON無法啟動進程原因有下面一些:

1、Oracle連接數超過進程數限制。(正是由於Oracle達到了進程數限制,進而PMON無法創建m000進程)

2、進程死鎖。

Bug 8426816 PMON may hang cleaning up a dead process (rare)

3、Bug引起的

Database hangs With Message 'Ksvcreate: Process(M001) Creation Failed' (文檔 ID 1233079.1)

事後我檢查了一下v$resource_limit,發現會話連接數、進程數並沒有超。那麼完全可以排除這個因素,那麼現在就有可能是進程死鎖或bug造成的

同事在檢查過程中發現Physic memory資源嚴重不足,引起了Swap頻繁讀寫。繼續檢查SGA參數發現sga_max_size、sga_target設置過大(這台測試服務器是虛擬機做的克隆,生產環境的RAM為64G,SGA也設置較大,克隆過後ORACLE實例啟動不了,調整了SGA_TARGET、SGA_MAX_SIZE等參數後才啟動成功,但是不知為什麼sga_max_size設置了成了11264M(11G),有可能是當時要設置為1G多,因為物理內存才3G多,但是不知是手抖了還是搞暈了,當然也不排除後面被人改掉,居然設置成了11264M大小,汗顏啊。居然運行了這麼久直到最近才出現問題,測試數據庫基本不會做巡檢)

然後在Troubleshooting Guide (TSG) - Ksvcreate: Process(xxxx) Creation Failed / ORA-00445: Background Process "xxxx" Did Not Start After n Seconds (文檔 ID 1379200.1) 裡面發現當OS的資源或設置不正確時,尤其是物理內存或swap不足時,將會導致不能生成新的進程。英文原文如下:

OS Configuration Checks

This error may be observed due to lack of OS resources or incorrect configuration, typically memory or swap may be insufficient to spawn a new process. Please check the list below to verify the OS settings and configuration

當然關於這點我和同事有些爭議。不過我認為是這些導致數據庫出現這些問題的。修改SGA相關參數應該能解決這個問題,不過還需觀察一段時間。

 

另外,關於kswapd0進程,在博客調整linux內核盡量用內存,而不用swap裡面有較詳細介紹,摘抄部分內容如下所示:

Linux uses kswapd for virtual memory management such that pages that havebeen recently accessed are kept in memory and less active pages are paged outto disk.

(what is a page?)…Linux uses manages memory in units called pages.

So,the kswapd process regularly decreases the ages of unreferencedpages…and at the end they are paged out(moved out) to disk

kswapd0進程的作用:它是虛擬內存管理中,負責換頁的,操作系統每過一定時間就會喚醒kswapd ,看看內存是否緊張,如果不緊張,則睡眠,在 kswapd 中,有2 個閥值,pages_hige 和 pages_low,當空閒內存頁的數量低於 pages_low的時候,kswapd進程就會掃描內存並且每次釋放出32 個free pages,直到 free page 的數量到達pages_high。

physical mem 不足,引起 swap 頻繁讀寫。kswapd0 是系統的虛擬內存管理程序,如果物理內存不夠用,系統就會喚醒 kswapd0 進程,由 kswapd0 分配磁盤交換空間作緩存,因而占用大量的 CPU 資源。

 

參考資料:

http://www.myjishu.com/?p=80

http://www.nowamagic.net/librarys/veda/detail/2539

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved