程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LINUX下C-C++類軟件的診斷,linuxc-c

LINUX下C-C++類軟件的診斷,linuxc-c

編輯:C++入門知識

LINUX下C-C++類軟件的診斷,linuxc-c


一般C/C++寫程序由於內存、指針等問題在後期的過程都一般會遇到內存等資源洩露、崩潰等問題,對於這些問題,一般從哪個角度解決呢?

下面從幾個角度進行總結:

內存洩露

首先需要注意一個問題是top或者htop顯示的內存使用中cache的問題,這個和windows中的任務管理器看到的有差別。

具體分析如下:

在linux讀寫文件時,它用於緩存物理磁盤上的磁盤塊,從而加快對磁盤上數據的訪問。

buffer cache的內容對應磁盤上一個塊(block),塊通常為1K,都是連續的。在linux下,為了更有效的使用物理內存,操作系統自動使用所有空閒內存作為Buffer Cache使用。當程序需要更多內存時,操作系統會自動減小Cache的大小。我們在觀察Linux的內存使用情況時,只要沒發現用swap的交換空間,就不必擔心自己的內存太少。http://blog.csdn.net/heizistudio/article/details/25125061

如下圖,htop顯示的數據,其中長時運行時,Mem項有時會使用完了,此時並不表明程序洩露占用,檢查真正的進程項目的RES項的內存使用,這個是正在使用的,或者執行 pmap -d 某個進程號,也可以查看

wps100.tmp

[htop還可以直觀的查看線程情況]

有了這些問題,那我們有更好的辦法避免嗎?答案是:

Ø 智能指針

n C++ 11標准已經有了,stl中的auto_ptr盡量還是避免吧

n boost的share_ptr是常用的

n 雙刃劍,使用這個在特定的場景下資源消耗比純生的new delete效率又損失

文件資源洩露

Ø df -k /##

n 如果某個目錄下的操作文件反復讀寫,可以看到正在使用和已經使用的信息,據此可以查看是否有文件沒有關閉

Ø Lsof

n 列出當前系統打開文件的工具

n lsof -p pid

n http://blog.csdn.net/guoguo1980/article/details/2324454

Ø fuser

n 用來顯示所有正在使用著指定的file, file system 或者 sockets的進程信息

n http://www.cnblogs.com/yuboyue/archive/2011/07/18/2109838.html

查看網絡信息的netstat ss

http://stackoverflow.com/questions/11763376/difference-between-netstat-and-ss-in-linux

http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201222502510543/

procfs

windows下有sysinternals工具,非常方便監控widnows的文件、網絡、注冊表等的訪問;Linux的更厲害的武器,不過都是文件,查看起來有點麻煩,用習慣了功能更強大。

http://blog.csdn.net/jeek566/article/details/8695240

mysql洩露

mysql命令行可以初步查看,如下:

root@csbit:~# mysql -uroot -proot

Warning: Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 28

Server version: 5.6.21 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show processlist;

+----+-------+-----------+--------+---------+------+-------+------------------+

| Id | User  | Host      | db     | Command | Time | State | Info             |

+----+-------+-----------+--------+---------+------+-------+------------------+

| 28 | root  | localhost | NULL   | Query   |    0 | init  | show processlist |

+----+-------+-----------+--------+---------+------+-------+------------------+

3 rows in set (0.00 sec)

如果show processlist顯示的數據不斷增多,軟件就是有鏈接洩露,c++處理最好使用cppdb這些有連接池處理的第三方庫加速

如果想檢查更詳細的信息MONyog這個工具可以一用

崩潰分析

洩露分析工具

http://www.cnblogs.com/2018/p/3228174.html

http://www.cnblogs.com/2018/p/3230736.html

linux下發布的執行文件崩潰的問題定位 心得一則

http://www.cnblogs.com/2018/p/3010691.html

http://www.cnblogs.com/2018/archive/2012/05/18/2503897.html

性能調優

問題出來後,如何改善系統性能,此時切記8/2原則,首先修改的是關鍵路徑的部分

http://www.cnblogs.com/2018/p/3380773.html

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