<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>How to use PHP-APD in your scripts</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="apd.examples.html">Examples</a></div> <div class="next" style="text-align: right; float: right;"><a href="ref.apd.html">APD Functions</a></div> <div class="up"><a href="apd.examples.html">Examples</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><div id="apd.examples.usage" class="section"> <h2 class="title">How to use PHP-APD in your scripts</h2> <div class="procedure"> <ol type="1"><li> <p class="para"> As the first line of your PHP script, call the apd_set_pprof_trace() function to start the trace: </p> <p class="para"> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />apd_set_pprof_trace</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </p> <p class="para"> You can insert the line anywhere in your script, but if you do not start tracing at the beginning of your script you discard profile data that might otherwise lead you to a performance bottleneck. </p> </li> <li> <p class="para"> Now run your script. The dump output will be written to <var class="filename">apd.dumpdir/pprof_pid.ext</var>. <div class="tip"><strong class="tip">Tip</strong> <p class="para"> If you're running the CGI version of PHP, you will need to add the '-e' flag to enable extended information for apd to work properly. For example: <strong class="userinput"><code>php -e -f script.php</code></strong> </p> </div> </p> </li> <li> <p class="para"> To display formatted profile data, issue the <strong class="command">pprofp</strong> command with the sort and display options of your choice. The formatted output will look something like: <div class="example-contents screen"> <div class="cdata"><pre> bash-2.05b$ pprofp -R /tmp/pprof.22141.0 Trace for /home/dan/testapd.php Total Elapsed Time = 0.00 Total System Time = 0.00 Total User Time = 0.00 Real User System secs/ cumm %Time (excl/cumm) (excl/cumm) (excl/cumm) Calls call s/call Memory Usage Name -------------------------------------------------------------------------------------- 100.0 0.00 0.00 0.00 0.00 0.00 0.00 1 0.0000 0.0009 0 main 56.9 0.00 0.00 0.00 0.00 0.00 0.00 1 0.0005 0.0005 0 apd_set_pprof_trace 28.0 0.00 0.00 0.00 0.00 0.00 0.00 10 0.0000 0.0000 0 preg_replace 14.3 0.00 0.00 0.00 0.00 0.00 0.00 10 0.0000 0.0000 0 str_replace </pre></div> </div> </p> <p class="para"> The -R option used in this example sorts the profile table by the amount of real time the script spent executing a given function. The "cumm call" column reveals how many times each function was called, and the "s/call" column reveals how many seconds each call to the function required, on average. </p> </li> <li> <p class="para"> To generate a calltree file that you can import into the KCacheGrind profile analysis application, issue the <strong class="command">pprof2calltree</strong> comand. </p> </li> </ol></div> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="apd.examples.html">Examples</a></div> <div class="next" style="text-align: right; float: right;"><a href="ref.apd.html">APD Functions</a></div> <div class="up"><a href="apd.examples.html">Examples</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>