linux cpu占有率居高不下 調試

来源:http://www.cnblogs.com/shenlinken/archive/2016/04/22/5422279.html
-Advertisement-
Play Games

今天調試程式,使用top命令後,發現程式的cpu占有率很高,一直在99,這很可怕,所以來調試。 使用top命令,得如下結果 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1997 root 20 0 358m 71m 3208 S 99. ...


今天調試程式,使用top命令後,發現程式的cpu占有率很高,一直在99,這很可怕,所以來調試。

使用top命令,得如下結果

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1997 root 20 0 358m 71m 3208 S 99.1 7.2 81:53.50 test
1 root 20 0 24332 2044 1176 S 0.0 0.2 0:01.36 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:46.51 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:38.53 kworker/0:0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0

可知test的PID為1997

然後具體查看test里線程的cpu使用情況

使用 top -H -p 1997 命令

root@slk:~# top -H -p 1997

top - 17:19:47 up 15 days, 34 min, 4 users, load average: 1.02, 1.06, 1.06
Tasks: 8 total, 1 running, 7 sleeping, 0 stopped, 0 zombie
Cpu(s): 99.3%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.3%si, 0.3%st
Mem: 1017924k total, 887500k used, 130424k free, 85928k buffers
Swap: 0k total, 0k used, 0k free, 351280k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2005 root 20 0 358m 71m 3208 R 99.3 7.2 83:44.47 test
2001 root 20 0 358m 71m 3208 S 0.3 7.2 0:08.66 test 
2004 root 20 0 358m 71m 3208 S 0.3 7.2 0:19.61 test 
1997 root 20 0 358m 71m 3208 S 0.0 7.2 0:26.24 test 
1999 root 20 0 358m 71m 3208 S 0.0 7.2 0:00.06 test 
2000 root 20 0 358m 71m 3208 S 0.0 7.2 0:00.00 test
2002 root 20 0 358m 71m 3208 S 0.0 7.2 0:05.86 Server Listen(2
2003 root 20 0 358m 71m 3208 S 0.0 7.2 0:00.00 Server Accept(2

可得線程中CPU占有率最高的線程的PID是2005

使用gdb icdn 2005 命令

root@slk:~# gdb icdn 2005
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
icdn: No such file or directory.
Attaching to process 2005

warning: process 2005 is a cloned process
Reading symbols from /home/slk/test/snmptrapd...done.
Reading symbols from /usr/lib/libnetsnmp.so.30...done.
Loaded symbols for /usr/lib/libnetsnmp.so.30
Reading symbols from /lib/x86_64-linux-gnu/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Loaded symbols for /lib/x86_64-linux-gnu/libpthread.so.0
Reading symbols from /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18
Reading symbols from /usr/local/lib/libstd.so...(no debugging symbols found)...done.
Loaded symbols for /usr/local/lib/libstd.so
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6
Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/librt.so.1
Reading symbols from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from /lib/x86_64-linux-gnu/libz.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libz.so.1
Reading symbols from /lib/x86_64-linux-gnu/libdl.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libdl.so.2
Reading symbols from /lib/x86_64-linux-gnu/libm.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libm.so.6
Reading symbols from /usr/local/lib/libudt.so...(no debugging symbols found)...done.
Loaded symbols for /usr/local/lib/libudt.so
Reading symbols from /usr/lib/x86_64-linux-gnu/libstdc++.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Reading symbols from /lib/x86_64-linux-gnu/libgcc_s.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libgcc_s.so.1
Reading symbols from /lib/x86_64-linux-gnu/libnss_files.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libnss_files.so.2
execute_search () at test.c:310


從最後一行可知,線程2005運行的是execute_search這個函數,然後查看該函數,發現有這樣一段

 

while(g_search_state == 1)
{
  tmp = g_data_list->phead->next;

  if (tmp)
  {
    pthread_mutex_lock(&g_mysql_mutex);
    res.result = search_mysql(tmp->sn, &(res.machine));
    pthread_mutex_unlock(&g_mysql_mutex);

    snprintf(res.sn, sizeof(res.sn), "%s", tmp->sn);
  }
}

由於tmp長期為NULL,所以這變成了一個while的死迴圈,而死迴圈極為占用記憶體,於是再下麵加上usleep(50000),問題解決

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • IK分詞器地址:https://github.com/medcl/elasticsearch-analysis-ik 安裝好ES之後就可以安裝分詞器插件了 記住選擇ES對應的版本 對應的有版本選擇下載: 下載之後了,解壓之後,使用maven,mvn clean package 打包 找到目錄/ela ...
  • OS:CentOS6.3 ant版本:apache-ant-1.9.2-bin 第1步:下載ant apache-ant-1.9.2-bin.tar.gz 第2步:解壓 tar -zxvf apache-ant-1.9.2-bin.tar.gz 第3步:將ant複製或移動到usr目錄 mv apac ...
  • sk_buff 目錄 1 sk_buff介紹 2 sk_buff組成 3 struct sk_buff結構體 4 sk_buff成員變數 4.1 Layout佈局 4.2 General通用 4.3 Feature-specific功能相關 5 sk_buff管理和操作函數 5.1緩衝區操作函數sk... ...
  • 用root 進入mysql後 mysql>set password =password('你的密碼'); mysql>flush privileges; 登錄: mysql -u root -p 輸入密碼 登錄: mysql -u root -p 輸入密碼 ...
  • 【初識Github】 首先讓我們大家一起喊一句“Hello Github”。YEAH!就是這樣。Git是一個分散式的版本控制系統,最初由Linus Torvalds編寫,用作Linux內核代碼的管理。在推出後,Git在其它項目中也取得了很大成功,尤其是在Ruby社區中。目前,包括Rubinius和M ...
  • 一、JDK的下載: Oracle JDK官網:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下載JDK的壓縮幫包(tar.gz),並將其解壓。(可以解壓到任何目錄,如~/usr/ ...
  • keepalived完全遵守VRRP協議包括競選機制,至於VRRP是什麼這裡不說了參考http://wenku.baidu.com/link?url=1UbkmHuQlGECgC90P7zF6u2xYyifLK0F-G_7pehNVUitZZExISjZ-B22TJKKGyYIZXh9X7uULA8 ...
  • 第二章 搭建Android 開發環境 雖然在這一章中講的是Android底層開發環境,但是相應伴隨的還有Android NDK程式來測試Linux驅動,HAL程式庫。底層開發不僅需要交叉編譯環境,還要開發應用環境。 所使用到的工具有:JDK6或以上版本,Eclipse3.4或以上版本,ADT,CDT ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...