MongoDB出現CPU飈高,如何強制停止正在執行的操作


  如果發出了一個執行耗時很長的任務給MongoDB服務器,客戶端強制終止會導致任務依然在服務器端執行。

  這時MongoDB提供了查詢和管理正在執行任務的方式。

// db.currentOp()   獲得當前的所有`in progressing`的操作,包括insert/query/update/remove/getmore/command等
> db.currentOp(true)

  返回的數據結構如下:

{ "inprog" :   
        [   
            {  
                        "opid" : 3434473,//操作的id  
                        "active" : <boolean>,//是否處於活動狀態  
                        "secs_running" : 0,//操作運行了多少秒  
                        "op" : "<operation>",//具體的操作行為,包括(insert/query/update/remove/getmore/command)  
                        "ns" : "<database>.<collection>",//操作的命名空間,如:數據庫名.集合名  
                        "query" : {//具體的操作語句  
                        },  
                        "client" : "<host>:<outgoing>",//連接的客戶端信息  
                        "desc" : "conn57683",//數據庫連接描述  
                        "threadId" : "0x7f04a637b700",//線程id  
                        "connectionId" : 57683,//數據庫連接id  
                        "locks" : {//鎖的相關信息  
                                "^" : "w",  
                                "^local" : "W",  
                                "^<database>" : "W"  
                        },  
                        "waitingForLock" : false,//是否在等待並獲取鎖,  
                        "msg": "<string>"  
                        "numYields" : 0,  
                        "progress" : {  
                                "done" : <number>,  
                                "total" : <number>  
                        }  
                        "lockStats" : {  
                                "timeLockedMicros" : {//此操作獲得以下鎖后,把持的微秒時間  
                                        "R" : NumberLong(),//整個mongodb服務實例的全局讀鎖  
                                        "W" : NumberLong(),//整個mongodb服務實例的全局寫鎖  
                                        "r" : NumberLong(),//某個數據庫實例的讀鎖  
                                        "w" : NumberLong() //某個數據庫實例的寫鎖  
                                },  
                                "timeAcquiringMicros" : {//此操作為了獲得以下的鎖,而耗費等待的微秒時間  
                                        "R" : NumberLong(),//整個mongodb服務實例的全局讀鎖  
                                        "W" : NumberLong(),//整個mongodb服務實例的全局寫鎖  
                                        "r" : NumberLong(),//某個數據庫實例的讀鎖  
                                        "w" : NumberLong()//某個數據庫實例的寫鎖  
                                }  
                        }  
                },  
                .....  
               
        ]   
    }

 

找到其中耗時secs_running很長的操作,有可能是異常操作,確認后可 > db.killOp(opid)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM