成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

php-stacktrace: PHP進(jìn)程外查看函數(shù)調(diào)用堆棧

xiyang / 2244人閱讀

摘要:要看到具體的函數(shù)就需要用擴(kuò)展或者用調(diào)試,高級(jí)點(diǎn)還可以用。就是要跟蹤的進(jìn)程。原理眾所周知,是用寫(xiě)的,而各種函數(shù)調(diào)用的信息都會(huì)用語(yǔ)言的來(lái)表示,所以只要兩步就能拿到堆棧信息讀取進(jìn)程的內(nèi)存在內(nèi)存里找到函數(shù)調(diào)用堆棧信息第一步可以通過(guò)或?qū)崿F(xiàn)。

生產(chǎn)環(huán)境多多少少會(huì)遇到CPU占用很高或者卡住的PHP進(jìn)程,這時(shí)怎樣才能知道這個(gè)進(jìn)程在干啥呢?

一個(gè)方法是strace跟蹤系統(tǒng)調(diào)用和參數(shù),這樣能大概知道PHP進(jìn)程在干啥。要看到具體的PHP函數(shù)就需要用PHP擴(kuò)展(xdebug、xhprof)或者用GDB調(diào)試,高級(jí)點(diǎn)還可以用DTrace。

上周發(fā)現(xiàn)了ruby-stacktrace,它直接讀取ruby進(jìn)程的內(nèi)存來(lái)獲取堆棧信息,不用GDB和擴(kuò)展,所以性能很好,于是我也照著寫(xiě)了一個(gè)php-stacktrace,算是勉強(qiáng)能用的玩具。

使用

使用比較簡(jiǎn)單,下載解壓即可:

$ ./php-stacktrace --help
php-stacktrace 0.1
Sampling profiler for PHP programs

USAGE:
    php-stacktrace   

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

ARGS:
          trace or top or oneshot
        Path to php debuginfo
              PID of the PHP process you want to profile

三個(gè)參數(shù)都是必填的。

COMMAND可以是tracetop、oneshot。oneshot只查看一次就退出,tracetop會(huì)一直跟蹤,trace的輸出可以用來(lái)生成火焰圖,top統(tǒng)計(jì)函數(shù)耗時(shí)。

DEBUGINFO是調(diào)試信息文件的路徑,Linux通常要獨(dú)立安裝debuginfo包,因?yàn)椴粫?huì)從elf里解析路徑,所以要通過(guò)這個(gè)參數(shù)指定,通常的路徑是/usr/lib/debug/.dwz/php....(在隱藏目錄里,是個(gè)小坑)。

PID就是要跟蹤的PHP進(jìn)程ID。

順帶一提,只支持非線(xiàn)程安全的PHP 7.1。

原理

眾所周知,Zend VM是用C寫(xiě)的,而各種PHP函數(shù)調(diào)用的信息都會(huì)用C語(yǔ)言的struct/union來(lái)表示,所以只要兩步就能拿到堆棧信息:

讀取PHP進(jìn)程的內(nèi)存

在內(nèi)存里找到函數(shù)調(diào)用堆棧信息

第一步可以通過(guò)ptraceprocess_vm_readv實(shí)現(xiàn)。ptrace就是調(diào)試器所用的方法,它可以暫停PHP進(jìn)程然后讀取內(nèi)存。process_vm_readv可以不暫停進(jìn)程,性能可能更好,但是不可靠,因?yàn)镻HP還在執(zhí)行,堆棧信息不斷變化,很容易讀到錯(cuò)誤的內(nèi)存。

第二步就需要DWARF調(diào)試信息了,調(diào)試信息里記錄了結(jié)構(gòu)體大小、字段偏移信息,通過(guò)這些信息我們就可以準(zhǔn)確地去讀內(nèi)存然后做解析。

原理還是很簡(jiǎn)單的。

下一步

復(fù)制vm_stack,盡量在一次process_vm_readv拿到主要的堆棧信息

增加作用域信息,現(xiàn)在只有函數(shù)名

完善錯(cuò)誤處理,現(xiàn)在的代碼是一團(tuán)糟

多學(xué)點(diǎn)Rust

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30615.html

相關(guān)文章

  • 2017回顧

    摘要:按使用的語(yǔ)言來(lái)總結(jié)一下年。第三個(gè)后端項(xiàng)目,還算比較成功,上線(xiàn)了大半年,沒(méi)有明顯的性能問(wèn)題,做修改也是非常容易。還用了一個(gè)集群去做部署先是阿里云的集群方案,后是,集群監(jiān)控日志采集配置管理等等都沒(méi)少弄。 showImg(https://segmentfault.com/img/bV0VHw?w=1495&h=1144); 按使用的語(yǔ)言來(lái)總結(jié)一下2017年。 TypeScript 用Type...

    springDevBird 評(píng)論0 收藏0
  • JVM詳解3.JDK監(jiān)控和故障處理工具

    摘要:點(diǎn)擊進(jìn)入我的博客命令行工具這些工具大多數(shù)是類(lèi)庫(kù)的一層薄的包裝,它們的主要功能代碼是在類(lèi)庫(kù)中實(shí)現(xiàn)的??梢暬ぞ呤堑侥壳盀橹闺S發(fā)布的功能最強(qiáng)大的運(yùn)行監(jiān)視和故障處理程序,并且可以預(yù)見(jiàn)在未來(lái)一段時(shí)間內(nèi)都是官方主力發(fā)展的虛擬機(jī)故障處理工具。 點(diǎn)擊進(jìn)入我的博客 3.1 JDK命令行工具 showImg(https://segmentfault.com/img/remote/14600000174...

    Keven 評(píng)論0 收藏0
  • PHP并發(fā)IO編程之路

    摘要:下文如無(wú)特殊聲明將使用進(jìn)程同時(shí)表示進(jìn)程線(xiàn)程。收到數(shù)據(jù)后服務(wù)器程序進(jìn)行處理然后使用向客戶(hù)端發(fā)送響應(yīng)。現(xiàn)在各種高并發(fā)異步的服務(wù)器程序都是基于實(shí)現(xiàn)的,比如。 并發(fā) IO 問(wèn)題一直是服務(wù)器端編程中的技術(shù)難題,從最早的同步阻塞直接 Fork 進(jìn)程,到 Worker 進(jìn)程池/線(xiàn)程池,到現(xiàn)在的異步IO、協(xié)程。PHP 程序員因?yàn)橛袕?qiáng)大的 LAMP 框架,對(duì)這類(lèi)底層方面的知識(shí)知之甚少,本文目的就是詳細(xì)介...

    Riddler 評(píng)論0 收藏0
  • PHP回顧之多進(jìn)程編程

    摘要:多進(jìn)程中與多進(jìn)程相關(guān)的兩個(gè)重要拓展是和。函數(shù)執(zhí)行期間,主進(jìn)程除了等待無(wú)法處理其他任務(wù),所以一般不認(rèn)為這是多進(jìn)程編程。回收子進(jìn)程有兩種方式,一種是主進(jìn)程調(diào)用函數(shù)等待子進(jìn)程結(jié)束另外一種是處理信號(hào)。 轉(zhuǎn)載請(qǐng)注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie web響應(yīng) session 數(shù)據(jù)庫(kù)操作 加解...

    lifesimple 評(píng)論0 收藏0
  • 基本性能分析,省了幾百萬(wàn)美元

    摘要:本文是關(guān)于我如何應(yīng)用基本性能分析技術(shù),借助火焰圖做了一處小改進(jìn),使得我們計(jì)算機(jī)集群的狀況獲得了倍的改善,并在第二年幫助節(jié)省了幾百萬(wàn)刀。最終,通過(guò)對(duì)平均大小在的事件進(jìn)行批量插入,我們的吞吐量獲得了的提高。 本文是關(guān)于我如何應(yīng)用基本性能分析技術(shù),借助火焰圖做了一處小改進(jìn),使得我們 Postgres 計(jì)算機(jī)集群的 CPU 狀況獲得了 10 倍的改善,并在第二年幫助 Heap 節(jié)省了幾百萬(wàn)刀。針對(duì)用...

    張憲坤 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<