pstack使用入門


  1、pstack/gstack:print a stack trace of a running process

  1)用法:gstack pid。

  2)簡介:gstack命令attach到指定pid的進程,並打印其執行堆棧跟蹤(execution stack trace)。若是多線程進程,還可以分別打印出各線程的堆棧跟蹤。如以下片斷:

Thread 28 (Thread 0x7f771e50c700 (LWP 24360)):
#0  0x00000038cfa0b63c in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x00000000004b3c08 in boost::asio::detail::task_io_service::run(boost::system::error_code&) ()
#2  0x0000000000534da3 in io_service_pool::runService(std::shared_ptr<boost::asio::io_service>) ()
... ...

  gstack打印的只是某一瞬間進程/線程的堆棧跟蹤,但可以通過頻繁采樣(如每秒執行一次)獲得足夠的統計信息,並保存到文件中,再作分析。

  3)原理:

[root@localhost ~]# which gstack
/usr/bin/gstack
[root@localhost ~]# file /usr/bin/gstack
/usr/bin/gstack: POSIX shell script, ASCII text executable

  gstack實際上是shell腳本,它應用了gdb的thread apply all bt子命令。thread apply表示將一個命令(bt)應用到指定的一些線程(all)。

  4)應用:

  (1)使用pstack確定進程掛起的位置。

  (2)比如,同一程序的兩個不同版本在運行時CPU的使用情況有明顯的不同,則可分別收集它們的統計信息,再作比較(如從#0入手),從中找出兩者函數調用情況的不同之處等。

 

 

不斷學習中。。。


免責聲明!

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



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