<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Solaris 10: советы и приёмы системного администрирования - DTrace</title>
    <link>http://solaris.reys.net/</link>
    <description>Как пользоваться DTrace, ZFS, Solaris Zones и другими технологиями Solaris</description>
    <dc:language>ru</dc:language>
    <generator>Serendipity 1.1-alpha7 - http://www.s9y.org/</generator>
    
    

<item>
    <title>Новый вебсайт: DTrace Scripts</title>
    <link>http://solaris.reys.net/2007/11/dtrace-scripts-website</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2007/11/dtrace-scripts-website#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=165</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=165</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Через вебсайт &lt;a href=http://www.curthread.org&gt;CurThread.org&lt;/a&gt; я недавно узнал о новом онлайн проекте: &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=982&amp;amp;entry_id=165&quot;  onmouseover=&quot;window.status=&#039;http://www.dtracescripts.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;DTrace Scripts&quot;&gt;DTrace Scripts&lt;/a&gt;. Похоже на проект создания постоянно развивающейся коллекции скриптов и советов для DTrace, так что очень приятно видеть очередной проект, делающий эту замечательную технологию более известной и доступной в Unix кругах. 
    </content:encoded>

    <pubDate>Fri, 09 Nov 2007 14:53:56 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2007/11/dtrace-scripts-website</guid>
    <category>dtrace</category>
<category>scripts</category>
<category>website</category>
<category>dtrace</category>
<category>scripts</category>
<category>website</category>

</item>
<item>
    <title>Хорошая статья по DTrace</title>
    <link>http://solaris.reys.net/2006/02/dtrace_article</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2006/02/dtrace_article#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=107</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=107</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Благодаря &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=880&amp;amp;entry_id=107&quot; title=&quot;http://blogs.sun.com/ahl&quot;  onmouseover=&quot;window.status=&#039;http://blogs.sun.com/ahl&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Адаму Левенталю&lt;/a&gt;, одного из авторов &lt;b&gt;DTrace&lt;/b&gt;, я узнал о недавней статье про &lt;b&gt;DTrace&lt;/b&gt;, написанной &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=881&amp;amp;entry_id=107&quot; title=&quot;http://blogs.sun.com/bmc&quot;  onmouseover=&quot;window.status=&#039;http://blogs.sun.com/bmc&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Брайаном Кантриллом&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Статья мне очень понравилась, так что немедленно добавил её в мой &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=882&amp;amp;entry_id=107&quot; title=&quot;http://solaris.reys.net/dtrace&quot;  onmouseover=&quot;window.status=&#039;http://solaris.reys.net/dtrace&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;индекс ресурсов по DTrace&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Сама статья доступна по этой ссылке: &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=883&amp;amp;entry_id=107&quot; title=&quot;http://www.acmqueue.org/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=361&quot;  onmouseover=&quot;window.status=&#039;http://www.acmqueue.org/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=361&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Hidden in Plain Sight&lt;/a&gt; 
    </content:encoded>

    <pubDate>Wed, 08 Feb 2006 16:32:11 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2006/02/dtrace_article</guid>
    <category>article</category>
<category>dtrace</category>
<category>article</category>
<category>dtrace</category>

</item>
<item>
    <title>Полезные ресурсы по DTrace</title>
    <link>http://solaris.reys.net/2006/01/dtrace_useful_resources</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2006/01/dtrace_useful_resources#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=102</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=102</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Наконец-то положил начало ещё одной хорошей традиции на моём блоге. С сегодняшнего дня я буду поддерживать индекс ссылок на мои статьи по DTrace и добавлять к нему ссылки на все остальные ресурсы по DTrace, которые мне показались интересными.&lt;br /&gt;
&lt;br /&gt;
Данная коллекция ссылок находится по этому адресу: &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=768&amp;amp;entry_id=102&quot; title=&quot;http://solaris.reys.net/dtrace&quot;  onmouseover=&quot;window.status=&#039;http://solaris.reys.net/dtrace&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://solaris.reys.net/dtrace&lt;/a&gt; 
    </content:encoded>

    <pubDate>Fri, 27 Jan 2006 13:06:14 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2006/01/dtrace_useful_resources</guid>
    <category>dtrace</category>
<category>opensolaris</category>
<category>solaris 10</category>
<category>dtrace</category>
<category>opensolaris</category>
<category>solaris 10</category>

</item>
<item>
    <title>DTrace: игры с mod_auth_pam и Apache 2</title>
    <link>http://solaris.reys.net/2005/12/dtrace_mod_auth_pam</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2005/12/dtrace_mod_auth_pam#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=99</wfw:comment>

    <slash:comments>12</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=99</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Один из пользователей попросил помочь ему с настройкой &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=609&amp;amp;entry_id=99&quot; title=&quot;http://www.sun.com/software/solaris/pam/&quot;  onmouseover=&quot;window.status=&#039;http://www.sun.com/software/solaris/pam/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PAM&lt;/a&gt; аутентификации в &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=610&amp;amp;entry_id=99&quot; title=&quot;http://httpd.apache.org/&quot;  onmouseover=&quot;window.status=&#039;http://httpd.apache.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Apache 2&lt;/a&gt;, на одном из наших удалённых серверов. &lt;br /&gt;
&lt;br /&gt;
Казалось бы, простая до безобразия задача - скачать &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=611&amp;amp;entry_id=99&quot; title=&quot;http://pam.sourceforge.net/mod_auth_pam/&quot;  onmouseover=&quot;window.status=&#039;http://pam.sourceforge.net/mod_auth_pam/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;mod_auth_pam&lt;/a&gt;, скомпилировать его для Apache 2, и проверить, что всё работает. Система использует NIS, потому что я на неё смог запросто зайти.&lt;br /&gt;
&lt;br /&gt;
И что же? Не тут-то было! Модуль скомпилировался запросто, но работать отказывался - в error_log&#039;е упорно появлялись следующие строки (я разбил строку на двое, а то портится общий вид блога):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;&amp;#91;Tue&amp;#160;Dec&amp;#160;20&amp;#160;16&amp;#58;48&amp;#58;44&amp;#160;2005&amp;#93;&amp;#160;&amp;#91;error&amp;#93;&amp;#160;&amp;#91;client&amp;#160;xxx.xxx.xxx.xxx&amp;#93;&amp;#160;&amp;#160;\&lt;br /&gt;
PAM&amp;#58;&amp;#160;user&amp;#160;&#039;greys&#039;&amp;#160;-&amp;#160;not&amp;#160;authenticated&amp;#58;&amp;#160;No&amp;#160;account&amp;#160;present&amp;#160;for&amp;#160;user&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Всё это пользователь сделал сам, с моими мелкими наводками. На данной стадии он попросил дополнительной помощи, и я, дабы упростить задачу, решил:&lt;br /&gt;
&lt;br /&gt;
1) Перевести эксперименты с системы пользователя на свой Solaris 10-бокс. &lt;br /&gt;
2) Для начала отладить процедуру для локальных пользователей, а уже потом браться за NIS&lt;br /&gt;
&lt;br /&gt;
Увидев аналогичные ошибки на своей системе, я решил всерьёз взяться за PAM. Завёл строки в &lt;b&gt;/etc/pam.conf&lt;/b&gt; специально для Apache, и добавил к ним опцию &lt;b&gt;debug&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;httpd&amp;#160;&amp;#160;auth&amp;#160;required&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pam_authtok_get.so.1&amp;#160;debug&lt;br /&gt;
httpd&amp;#160;&amp;#160;auth&amp;#160;required&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pam_unix_auth.so.1&amp;#160;debug&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы удобнее ловилась отладочная информация, подправил &lt;b&gt;/etc/syslog.conf&lt;/b&gt;, чтобы он включал следующие строки:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;auth.debug&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/var/log/auth_log&lt;br /&gt;
user.debug&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/var/log/user_log&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
После этого стало удобнее наблюдать, что же именно происходит - по крайней мере, было ясно, что исполняется как раз та часть &lt;b&gt;/etc/pam.conf&lt;/b&gt;, которая и была нужна. Но ошибка по-прежнему вводила меня в тупик - пользователь явно существовал, но Apache&#039;м упорно не распознавался (опять приходится переносить строки, чтобы общий вид блога не портился):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;Dec&amp;#160;21&amp;#160;09&amp;#58;47&amp;#58;35&amp;#160;pele&amp;#160;httpd&amp;#91;29143&amp;#93;&amp;#58;&amp;#160;&amp;#91;ID&amp;#160;634615&amp;#160;user.debug&amp;#93;&amp;#160;\&lt;br /&gt;
pam_authtok_get&amp;#58;pam_sm_authenticate&amp;#58;&amp;#160;flags&amp;#160;=&amp;#160;1&lt;br /&gt;
Dec&amp;#160;21&amp;#160;09&amp;#58;47&amp;#58;35&amp;#160;pele&amp;#160;httpd&amp;#91;29143&amp;#93;&amp;#58;&amp;#160;&amp;#91;ID&amp;#160;378613&amp;#160;user.debug&amp;#93;&amp;#160;\&lt;br /&gt;
pam_dhkeys&amp;#58;&amp;#160;user&amp;#160;greys&amp;#160;not&amp;#160;found&lt;br /&gt;
Dec&amp;#160;21&amp;#160;09&amp;#58;47&amp;#58;35&amp;#160;pele&amp;#160;httpd&amp;#91;29143&amp;#93;&amp;#58;&amp;#160;&amp;#91;ID&amp;#160;896952&amp;#160;user.debug&amp;#93;&amp;#160;\&lt;br /&gt;
pam_unix_auth&amp;#58;&amp;#160;entering&amp;#160;pam_sm_authenticate&amp;#40;&amp;#41;&lt;br /&gt;
Dec&amp;#160;21&amp;#160;09&amp;#58;47&amp;#58;35&amp;#160;pele&amp;#160;httpd&amp;#91;29143&amp;#93;&amp;#58;&amp;#160;&amp;#91;ID&amp;#160;219349&amp;#160;user.debug&amp;#93;&amp;#160;\&lt;br /&gt;
pam_unix_auth&amp;#58;&amp;#160;user&amp;#160;greys&amp;#160;not&amp;#160;found&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Настал момент посмотреть, что же именно делают PAM и Apache 2, когда я ввожу запрашиваемые имя пользователя и пароль для доступа к странице. Тут я сразу вспомнил про замечательный скрипт &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=612&amp;amp;entry_id=99&quot; title=&quot;http://users.tpg.com.au/adsln4yb/DTrace/opensnoop&quot;  onmouseover=&quot;window.status=&#039;http://users.tpg.com.au/adsln4yb/DTrace/opensnoop&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;opensnoop&lt;/a&gt; от товарища Брэндана Грэгга (Brendan Gregg). И данный скрипт, запущенный в отдельной консоли, тут же помог мне увидеть, в чём была проблема:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;-1&amp;#160;&amp;#160;&amp;#160;2&amp;#160;/etc/pam_debug&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/etc/pam.conf&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/usr/lib/security/pam_authtok_get.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/usr/lib/passwdutil.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/usr/lib/libsldap.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/usr/lib/security/pam_dhkeys.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/usr/lib/security/pam_unix_cred.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/lib/libbsm.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/lib/libsecdb.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/usr/lib/libproject.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/lib/libproc.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/lib/librtld_db.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/lib/libelf.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/lib/libctf.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/usr/lib/security/pam_unix_auth.so.1&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;-1&amp;#160;&amp;#160;&amp;#160;2&amp;#160;/var/run/syslog_door&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;-1&amp;#160;&amp;#160;13&amp;#160;/etc/shadow&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/var/run/name_service_door&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;11&amp;#160;&amp;#160;&amp;#160;0&amp;#160;/etc/passwd&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;-1&amp;#160;&amp;#160;13&amp;#160;/etc/shadow&lt;br /&gt;
60001&amp;#160;24744&amp;#160;httpd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;-1&amp;#160;&amp;#160;&amp;#160;2&amp;#160;/var/run/syslog_door&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Как видно, &lt;b&gt;httpd&lt;/b&gt; не мог открыть файл &lt;b&gt;/etc/shadow&lt;/b&gt; (ошибка - код -1), естественно из-за ошибки доступа. Но на всякий случай это можно было проверить. Второй номер в строке про &lt;b&gt;/etc/shadow&lt;/b&gt; - это 13, код ошибки:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;bash-3.00#&amp;#160;grep&amp;#160;13&amp;#160;/usr/include/sys/errno.h&lt;br /&gt;
#define&amp;#160;EACCES&amp;#160;&amp;#160;13&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/&amp;#42;&amp;#160;Permission&amp;#160;denied&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#42;/&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Ну и после этого всё уже было делом техники:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#groupadd&amp;#160;shadows&lt;br /&gt;
#&amp;#160;chown&amp;#160;root&amp;#58;shadows&amp;#160;/etc/shadow&lt;br /&gt;
#&amp;#160;chmod&amp;#160;440&amp;#160;/etc/shadow&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
И осталось указать в &lt;b&gt;httpd.conf&lt;/b&gt;, чтобы Apache запускался как раз под этой группой, а не под nobody.&lt;br /&gt;
&lt;br /&gt;
pS: а изначально это всё не работало на машине с NIS-доступом, потому что там в &lt;b&gt;/etc/nsswitch.conf&lt;/b&gt; было написано не &lt;b&gt;passwd: files nis&lt;/b&gt;, а &lt;b&gt;passwd: compat&lt;/b&gt;, и всё использование NIS&#039;а было сделано с помощью указания групп с помощью + и - в файлах &lt;b&gt;/etc/passwd&lt;/b&gt; и &lt;b&gt;/etc/shadow&lt;/b&gt;. Т.е. доступ на чтение &lt;b&gt;/etc/shadow&lt;/b&gt; всё равно нужен, хотя реально потом это и будет обращение к NIS. 
    </content:encoded>

    <pubDate>Wed, 21 Dec 2005 13:29:25 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2005/12/dtrace_mod_auth_pam</guid>
    <category>apache2</category>
<category>dtrace</category>
<category>solaris</category>
<category>apache2</category>
<category>dtrace</category>
<category>solaris</category>

</item>
<item>
    <title>DTrace: наблюдение за PHP, часть 2</title>
    <link>http://solaris.reys.net/2005/12/dtrace_php_scripts_timer</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2005/12/dtrace_php_scripts_timer#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=98</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=98</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Следующим шагом наблюдения за PHP с помощью DTrace вполне может стать подобный скрипт. Он подсчитывает, сколько наносекунд провёл процесс Apache, выполняя ту или иную функцию PHP. &lt;br /&gt;
&lt;br /&gt;
В ходе работы, скрипт выводит таблицу процессов Apache и скриптов PHP, в них запускаемых. Позже выводится таблица всех функций, с указанием процесса, который их выполнял, и затраченного времени.&lt;br /&gt;
&lt;br /&gt;
Скрипт можно скачать тут: &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=580&amp;amp;entry_id=98&quot; title=&quot;http://solaris.reys.net/scripts/php-scripts-timer.d&quot;  onmouseover=&quot;window.status=&#039;http://solaris.reys.net/scripts/php-scripts-timer.d&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;php-scripts-timer.d&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
BEGIN&lt;br /&gt;
{&lt;br /&gt;
printf&amp;#40;&quot;php&amp;#160;scripts&amp;#160;timer&amp;#160;started\n&quot;&amp;#41;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;#58;dtrace.so&amp;#58;&amp;#58;function-entry&lt;br /&gt;
/&amp;#160;copyinstr&amp;#40;arg0&amp;#41;&amp;#160;==&amp;#160;&quot;&quot;&amp;#160;&amp;amp;&amp;amp;&amp;#160;name&amp;#91;pid,copyinstr&amp;#40;arg1&amp;#41;&amp;#93;&amp;#160;!=&amp;#160;1&amp;#160;/&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printf&amp;#40;&quot;%d&amp;#160;-&amp;#62;&amp;#160;%-30s\n&quot;,&amp;#160;pid,&amp;#160;copyinstr&amp;#40;arg1&amp;#41;&amp;#41;;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;name&amp;#91;pid,copyinstr&amp;#40;arg1&amp;#41;&amp;#93;&amp;#160;=&amp;#160;1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;#58;dtrace.so&amp;#58;&amp;#58;function-entry&lt;br /&gt;
/&amp;#160;copyinstr&amp;#40;arg0&amp;#41;&amp;#160;!=&amp;#160;&quot;&quot;&amp;#160;/&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;self-&amp;#62;ts&amp;#160;=&amp;#160;timestamp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;#58;dtrace.so&amp;#58;&amp;#58;function-return&lt;br /&gt;
/&amp;#160;copyinstr&amp;#40;arg0&amp;#41;&amp;#160;!=&amp;#160;&quot;&quot;&amp;#160;/&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;self-&amp;#62;elapsed&amp;#160;=&amp;#160;timestamp&amp;#160;-&amp;#160;self-&amp;#62;ts;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;@time&amp;#91;pid,&amp;#160;copyinstr&amp;#40;arg0&amp;#41;&amp;#93;&amp;#160;=&amp;#160;sum&amp;#40;self-&amp;#62;elapsed&amp;#41;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
END&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printf&amp;#40;&quot;&amp;#60;------&amp;#160;php&amp;#160;scripts&amp;#160;timer&amp;#160;finished&quot;&amp;#41;;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printf&amp;#40;&quot;\n%10s&amp;#160;%40s&amp;#160;%14s\n&quot;,&amp;#160;&quot;PID&quot;,&amp;#160;&quot;PHP&amp;#160;function&quot;,&amp;#160;&quot;Time&amp;#160;elapsed&quot;&amp;#41;;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printa&amp;#40;&quot;%10d&amp;#160;%40s&amp;#160;%14@u\n&quot;,&amp;#160;@time&amp;#41;;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
А вот так может выглядеть типичный результат запуска этого скрипта, при параллельно открываемых с вашего сервера страниц с PHP:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;php&amp;#160;scripts&amp;#160;timer&amp;#160;started&lt;br /&gt;
223074&amp;#160;-&amp;#62;&amp;#160;/export/www/nightly/pma/left.php&lt;br /&gt;
223071&amp;#160;-&amp;#62;&amp;#160;/export/www/nightly/pma/main.php&lt;br /&gt;
223074&amp;#160;-&amp;#62;&amp;#160;/export/www/nightly/pma/css/phpmyadmin.css.php&lt;br /&gt;
223071&amp;#160;-&amp;#62;&amp;#160;/export/www/nightly/pma/css/phpmyadmin.css.php&lt;br /&gt;
&lt;br /&gt;
&amp;#60;------&amp;#160;php&amp;#160;scripts&amp;#160;timer&amp;#160;finished&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;PID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;PHP&amp;#160;function&amp;#160;&amp;#160;&amp;#160;Time&amp;#160;elapsed&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223074&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;ob_get_level&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;22280&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223074&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get_cfg_var&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;32678&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223074&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;mysql_get_client_info&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;32705&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223074&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;strrpos&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;39160&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223074&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;PMA_auth_set_user&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;39178&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223071&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get_magic_quotes_gpc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;39478&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223071&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;ob_get_level&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;43673&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223071&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;addslashes&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;54847&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223074&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;strpos&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;56869&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223071&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;basename&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;61874&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223071&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;PMA_reloadNavigation&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;63588&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223071&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;mysql_get_client_info&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;64570&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223071&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get_cfg_var&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;64592&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223071&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;ereg_replace&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;65993&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;223074&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get_magic_quotes_gpc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;67738&lt;br /&gt;
...&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;234950&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;main&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;84254684&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;238255&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;main&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;105016748&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;238255&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;substr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;153752861&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;238255&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;mysql_query&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;192585647&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;238255&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;PMA_DBI_try_query&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;195113800&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;234950&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;PMA_DBI_query&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;220108343&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;234950&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;mysql_query&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;276732073&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;234950&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;PMA_DBI_try_query&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;280801228&lt;/div&gt; 
    </content:encoded>

    <pubDate>Tue, 13 Dec 2005 02:16:13 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2005/12/dtrace_php_scripts_timer</guid>
    <category>dtrace</category>
<category>php</category>
<category>dtrace</category>
<category>php</category>

</item>
<item>
    <title>DTrace: наблюдение за PHP</title>
    <link>http://solaris.reys.net/2005/12/dtrace_php_scripts_snoop</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2005/12/dtrace_php_scripts_snoop#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=95</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=95</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Наконец-то нашёл время, и скачал PEAR модуль &lt;a href=http://netevil.org/node.php?nid=413&gt;DTrace&lt;/a&gt;. Замечательная штука! Нашёл там одну маленькую проблему, и написал письмо товарщиу Фёрлонгу (&lt;a href=http://netevil.org/wiki.php?WezFurlong&gt;Wez Furlong&lt;/a&gt;), который немедленно внёс изменения в исходник модуля, и теперь всё работает просто замечательно. Большущее спасибо, Wez! :)&lt;br /&gt;
&lt;br /&gt;
Итак, самый первый скрипт для наблюдения за PHP: &lt;a href=http://solaris.reys.net/scripts/php-scripts-snoop.d&gt;php-scripts-snoop.d&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
&amp;#58;dtrace.so&amp;#58;&amp;#58;function-entry&lt;br /&gt;
/&amp;#160;copyinstr&amp;#40;arg0&amp;#41;&amp;#160;==&amp;#160;&quot;&quot;&amp;#160;/&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printf&amp;#40;&quot;%d&amp;#160;-&amp;#62;&amp;#160;%-30s\n&quot;,&amp;#160;pid,&amp;#160;copyinstr&amp;#40;arg1&amp;#41;&amp;#41;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;#58;dtrace.so&amp;#58;&amp;#58;function-return&lt;br /&gt;
/&amp;#160;copyinstr&amp;#40;arg0&amp;#41;&amp;#160;==&amp;#160;&quot;&quot;&amp;#160;/&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printf&amp;#40;&quot;%d&amp;#160;&amp;#60;-&amp;#160;%-30s\n&quot;,&amp;#160;pid,&amp;#160;copyinstr&amp;#40;arg1&amp;#41;&amp;#41;;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Качайте скрипт, ставьте ему &lt;b&gt;chmod a+x&lt;/b&gt;, и после запуска его в терминале на вашем веб-сервере, можно запускать различные скрипты PHP с этого сервера, и скрипт будет докладывать, когда начинается или заканчивается выполнение того или иного PHP скрипта, и который из процессов Apache за это отвечает:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;bash-3.00#&amp;#160;./php-scripts-snoop.d&lt;br /&gt;
204934&amp;#160;-&amp;#62;&amp;#160;/export/www/pma/index.php&lt;br /&gt;
204934&amp;#160;&amp;#60;-&amp;#160;/export/www/pma/index.php&lt;br /&gt;
204934&amp;#160;-&amp;#62;&amp;#160;/export/www/pma/css/phpmyadmin.css.php&lt;br /&gt;
204934&amp;#160;&amp;#60;-&amp;#160;/export/www/pma/css/phpmyadmin.css.php&lt;br /&gt;
204936&amp;#160;-&amp;#62;&amp;#160;/export/www/pma/left.php&lt;br /&gt;
204934&amp;#160;-&amp;#62;&amp;#160;/export/www/pma/queryframe.php&lt;br /&gt;
204936&amp;#160;&amp;#60;-&amp;#160;/export/www/pma/left.php&lt;br /&gt;
204936&amp;#160;-&amp;#62;&amp;#160;/export/www/pma/main.php&lt;br /&gt;
204934&amp;#160;&amp;#60;-&amp;#160;/export/www/pma/queryframe.php&lt;br /&gt;
204934&amp;#160;-&amp;#62;&amp;#160;/export/www/pma/css/phpmyadmin.css.php&lt;br /&gt;
204934&amp;#160;&amp;#60;-&amp;#160;/export/www/pma/css/phpmyadmin.css.php&lt;br /&gt;
204934&amp;#160;-&amp;#62;&amp;#160;/export/www/pma/css/phpmyadmin.css.php&lt;br /&gt;
204936&amp;#160;-&amp;#62;&amp;#160;/export/www/pma/css/phpmyadmin.css.php&lt;br /&gt;
204934&amp;#160;&amp;#60;-&amp;#160;/export/www/pma/css/phpmyadmin.css.php&lt;br /&gt;
204934&amp;#160;-&amp;#62;&amp;#160;/export/www/1.php&lt;br /&gt;
204934&amp;#160;&amp;#60;-&amp;#160;/export/www/1.php&lt;br /&gt;
204936&amp;#160;&amp;#60;-&amp;#160;/export/www/pma/css/phpmyadmin.css.php&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
pS: да, с сегодняшнего дня решено все скрипты выкладывать для скачивания - так оно вам удобней будет. Так что в ходе обработки архивных записей блога, все скрипты будут соответствующим образом обозваны и снабжены ссылками для скачивания. 
    </content:encoded>

    <pubDate>Tue, 06 Dec 2005 20:16:23 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2005/12/dtrace_php_scripts_snoop</guid>
    <category>dtrace</category>
<category>php</category>
<category>dtrace</category>
<category>php</category>

</item>
<item>
    <title>DTrace: параметры командной строки в скриптах</title>
    <link>http://solaris.reys.net/2005/05/dtrace_command_line_parameters</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2005/05/dtrace_command_line_parameters#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=62</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=62</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    При написании скриптов DTrace, часто вам нужно передать скрипту какой-нибудь параметр в командной строке. Эта простая задача может быть неожиданно трудной, если не прочесть раздел &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=546&amp;amp;entry_id=62&quot; title=&quot;http://docs.sun.com&quot;  onmouseover=&quot;window.status=&#039;http://docs.sun.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;docs.sun.com&lt;/a&gt; про &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=547&amp;amp;entry_id=62&quot; title=&quot;http://docs.sfbay/app/docs/doc/817-6223/6mlkidlim?a=view&quot;  onmouseover=&quot;window.status=&#039;http://docs.sfbay/app/docs/doc/817-6223/6mlkidlim?a=view&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;написание скриптов на DTrace&lt;/a&gt;, особенно раздел про &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=548&amp;amp;entry_id=62&quot; title=&quot;http://docs.sfbay/app/docs/doc/817-6223/6mlkidliq?a=view&quot;  onmouseover=&quot;window.status=&#039;http://docs.sfbay/app/docs/doc/817-6223/6mlkidliq?a=view&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;макросы параметров командной строки&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Как и в оболочках &lt;b&gt;sh&lt;/b&gt; и &lt;b&gt;bash&lt;/b&gt;, вы можете получить значения параметров командной строки с помощью макросов &lt;b&gt;$0&lt;/b&gt;..&lt;b&gt;$9&lt;/b&gt;. Но тут есть одно &quot;но&quot;. Значения параметров должны попадать под определенный тип - число, имя идентификатора или строку. Если переданный параметр не попадает под одно из этих определений, будет выдана ошибка.&lt;br /&gt;
&lt;br /&gt;
Давайте начнём с простенького скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
BEGIN&amp;#160;{&lt;br /&gt;
printf&amp;#40;&quot;Your&amp;#160;parameter&amp;#58;&amp;#160;%d\n&quot;,&amp;#160;$1&amp;#41;;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Если передать этому скрипту число в качестве параметра, никакой ошибки не будет, и вы получити следующее сообщение:&lt;br /&gt;
&lt;b&gt;Your parameter: 123&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Но если попробовать передать строчку вместо числа, выйдет следующее:&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
bash-3.00# ./args.d a1b2c3&lt;br /&gt;
dtrace: failed to compile script ./args.d: line 9: failed to resolve a1b2c3: Unknown variable name&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Это происходит потому, что DTrace пытается найти идентификатор &quot;a1b2c3&quot;. Почему так происходит? Это из-за особенностей определения типа параметра. Значение не похоже на число, а из-за того, что мы передали строку без кавычек, DTrace считает, что это не строка. Единственный остающийся вариант - это идентификатор. Переменной с таким именем в скрипте нет, и потому мы получаем ошибку.&lt;br /&gt;
&lt;br /&gt;
Чтобы проверить эту теорию, можно просто создать переменную с таким же именем в скрипте:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
BEGIN&amp;#160;{&lt;br /&gt;
a1b2c3=1979;&lt;br /&gt;
printf&amp;#40;&quot;Your&amp;#160;parameter&amp;#58;&amp;#160;%d\n&quot;,&amp;#160;$1&amp;#41;;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Пожалуйста - всё работает именно так, как я сказал:&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
Your parameter: 1979&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
И если параметр у вас - точно строчка, то нужно изменить скрипт (чтобы printf печатал строку %s, а не целое число %d, иначе и тут будет ошибка)...&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
BEGIN&amp;#160;{&lt;br /&gt;
a1b2c3=1979;&lt;br /&gt;
printf&amp;#40;&quot;Your&amp;#160;parameter&amp;#58;&amp;#160;%s\n&quot;,&amp;#160;$1&amp;#41;;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
... и передать строку, заключив её в кавычки, вот так:&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
bash-3.00# ./args.d &#039;&quot;a1b2c3&quot;&#039;&lt;br /&gt;
Your parameter: a1b2c3&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Как вы видите, теперь мы действительно передаём и обрабатываем наш параметр как строку, а одноимённая переменная, специально оставленная в скрипте, больше не используется, иначе было бы выведено её значение.&lt;br /&gt;
&lt;br /&gt;
Ну и ещё одна вещь напоследок. Если вы хотите все параметры обрабатывать как строки, и при этом не использовать кавычек, всё что нужно для этого, это работать с макросами с помощью двойного знака &lt;b&gt;$&lt;/b&gt;, и тогда вся процедура определения типа параметра будет пропущена:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
BEGIN&amp;#160;{&lt;br /&gt;
a1b2c3=1979;&lt;br /&gt;
printf&amp;#40;&quot;Your&amp;#160;parameter&amp;#58;&amp;#160;%s\n&quot;,&amp;#160;$$1&amp;#41;;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
И вот как можно будет передавать строки такому скрипту:&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
bash-3.00# ./args.d a1b2c3&lt;br /&gt;
Your parameter: a1b2c3&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Ну вот и всё на сегодня... Удачи с вашими скриптами DTrace! 
    </content:encoded>

    <pubDate>Wed, 18 May 2005 20:05:49 +0400</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2005/05/dtrace_command_line_parameters</guid>
    <category>dtrace</category>
<category>dtrace</category>

</item>
<item>
    <title>Советы и приёмы эффективной работы от создателей DTrace</title>
    <link>http://solaris.reys.net/2005/03/tips_and_tricks_from_dtrace_authors</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2005/03/tips_and_tricks_from_dtrace_authors#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=56</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=56</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Вчера &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=690&amp;amp;entry_id=56&quot; title=&quot;http://blogs.sun.com/bmc&quot;  onmouseover=&quot;window.status=&#039;http://blogs.sun.com/bmc&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Bryan Cantrill&lt;/a&gt; (один из создателей DTrace) &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=691&amp;amp;entry_id=56&quot; title=&quot;http://blogs.sun.com/roller/page/bmc/20050228&quot;  onmouseover=&quot;window.status=&#039;http://blogs.sun.com/roller/page/bmc/20050228&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;выложил&lt;/a&gt; презентацию с полезными советами и приёмами работы с DTrace, а также упоминанием подводных камней, на которые легко нарваться не только новичкам, но и тем, кто уже какое-то время активно использует DTrace.&lt;br /&gt;
&lt;br /&gt;
Как и оговаривается в начале презентации, часть вещей довольно проста - советы, это по большей части то, что многие могли бы знать, если бы второй раз перечитали документацию, а вот приёмы работы - очень даже полезные. Узнал много нового, и потому советую всем интересующимся тоже прочитать эту презентацию. &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=692&amp;amp;entry_id=56&quot; title=&quot;http://blogs.sun.com/roller/resources/bmc/dtrace_tips.pdf&quot;  onmouseover=&quot;window.status=&#039;http://blogs.sun.com/roller/resources/bmc/dtrace_tips.pdf&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Ссылка на PDF файл&lt;/a&gt;. 
    </content:encoded>

    <pubDate>Tue, 01 Mar 2005 13:38:04 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2005/03/tips_and_tricks_from_dtrace_authors</guid>
    
</item>
<item>
    <title>DTrace: провайдер pid</title>
    <link>http://solaris.reys.net/2005/02/dtrace_pid_provider</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2005/02/dtrace_pid_provider#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=55</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=55</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    При исследовании пользовательских процессов, часто нас интересует какой-то конкретный процесс. Поэтому мы используем переменную&lt;b&gt; $target&lt;/b&gt; (я о ней &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=693&amp;amp;entry_id=55&quot; title=&quot;http://solaris.reys.net/archives/43-DTrace-target.html&quot;  onmouseover=&quot;window.status=&#039;http://solaris.reys.net/archives/43-DTrace-target.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;уже рассказывал немного&lt;/a&gt;) или же просто номер процесса (pid) в предикатах наших проб, указывая таким образом DTrace наш особый интерес к тому или иному процессу. &lt;br /&gt;
&lt;br /&gt;
Для начинающих работу с DTrace - это вполне приемлемая тактика. Но есть и более правильный способ: использование провайдера pid.&lt;br /&gt;
&lt;br /&gt;
Как говорится в официальном руководстве, &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=694&amp;amp;entry_id=55&quot; title=&quot;http://docs.sun.com/app/docs/doc/817-6223/6mlkidlls?q=dtrace+pid&amp;amp;a=view&quot;  onmouseover=&quot;window.status=&#039;http://docs.sun.com/app/docs/doc/817-6223/6mlkidlls?q=dtrace+pid&amp;amp;a=view&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;провайдер pid&lt;/a&gt; - это на самом деле не просто провайдер DTrace, а целый класс провайдеров. Как видно из названия, он предлагает нам пробы, относящиеся к конкретному процессу.&lt;br /&gt;
&lt;br /&gt;
Скажем, провайдер pid737 предоставляет возможность следить за процессом с pid=737, и т.д. Более того - становится гораздо удобнее не только выделять интересующие нас пробы, но и понимать, на основе каких функций они создаются для каждого процесса.&lt;br /&gt;
&lt;br /&gt;
Такой способ отладки конкретного процесса, в отличие от пробы с использованием предиката типа &lt;b&gt;/pid == $target/&lt;/b&gt;, является более правильным. Вместо того, чтобы указанные пробы активизировались и предикат проверялся для каждого процесса, теперь DTrace и смотреть не станет на другие процессы - и лишь только для одного, нужного нам, и будут активированы указанные пробы. Переменную &lt;b&gt;$target&lt;/b&gt; по-прежнему можно и даже нужно использовать при создании наших проб с использованием провайдера pid.&lt;br /&gt;
&lt;br /&gt;
Мы уже знаем, как получить список проб, доступных DTrace. Я об этом уже &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=695&amp;amp;entry_id=55&quot; title=&quot;http://solaris.reys.net/archives/17-DTrace.html&quot;  onmouseover=&quot;window.status=&#039;http://solaris.reys.net/archives/17-DTrace.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;рассказывал здесь&lt;/a&gt;. Так вот, стоит нам лишь один раз использовать провайдер pid для какого-то процесса, как &lt;b&gt;dtrace -l&lt;/b&gt; начнёт нам показывать пробы, динамически созданные для него. Если процесс завершит работу, соответствующий провайдер исчезнет из списка доступных проб.&lt;br /&gt;
&lt;br /&gt;
Ещё одно удобство провайдера pid - это то, что в качестве модулей провайдера выступают библиотеки, подключаемые при выполнении исследуемого процесса. Соответственно, можно создавать пробы для отслеживания только лишь функций, выполняемых какой-то конкретной библиотекой. Очень удобно.&lt;br /&gt;
&lt;br /&gt;
Вот маленький примерчик. Берём самую обычную Hello, world! программку на C:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;void&amp;#160;main&amp;#40;&amp;#41;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printf&amp;#40;&quot;Hello,&amp;#160;world!\n&quot;&amp;#41;;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
После того, как мы получили исполняемый файл, принимаемся за наш очередной DTrace-скрипт:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
BEGIN&amp;#160;{&lt;br /&gt;
	printf&amp;#40;&quot;Target&amp;#160;pid&amp;#58;&amp;#160;%d\n&quot;,&amp;#160;$target&amp;#41;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pid$target&amp;#58;&amp;#58;&amp;#58;entry&amp;#160;{&lt;br /&gt;
	printf&amp;#40;&quot;%s&amp;#58;%s&amp;#58;%s&amp;#58;%s\n&quot;,&amp;#160;probeprov,&amp;#160;probemod,&amp;#160;probefunc,&amp;#160;probename&amp;#41;;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Сохраняем скрипт, делаем этот файл исполняемым, и запускаем его, указывая в параметре нашу hello:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;$&amp;#160;./pid-global.d&amp;#160;-c&amp;#160;./hello&amp;#160;|&amp;#160;more&lt;br /&gt;
Target&amp;#160;pid&amp;#58;&amp;#160;1059&lt;br /&gt;
Hello,&amp;#160;world!&lt;br /&gt;
pid1059&amp;#58;LM1`ld.so.1&amp;#58;call_array&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;LM1`ld.so.1&amp;#58;call_init&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;LM1`ld.so.1&amp;#58;leave&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;LM1`ld.so.1&amp;#58;fmap_setup&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;LM1`ld.so.1&amp;#58;munmap&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;LM1`ld.so.1&amp;#58;rt_bind_clear&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;LM1`ld.so.1&amp;#58;_rt_bind_clear&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;LM1`ld.so.1&amp;#58;rt_mutex_unlock&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;LM1`ld.so.1&amp;#58;_rt_null&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;LM1`ld.so.1&amp;#58;rt_bind_clear&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;LM1`ld.so.1&amp;#58;_rt_bind_clear&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;libc.so.1&amp;#58;libc_init&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;libc.so.1&amp;#58;__amd64id&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;libc.so.1&amp;#58;atexit&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;libc.so.1&amp;#58;lmalloc&amp;#58;entry&lt;br /&gt;
pid1059&amp;#58;libc.so.1&amp;#58;getbucketnum&amp;#58;entry&lt;br /&gt;
...&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Длинный список получится, почти 1000 строк - так что все показывать не буду, но идея, надеюсь, понятна. Видно, какие функции каждой библиотеки можно отследить средствами DTrace.&lt;br /&gt;
&lt;br /&gt;
Очевидным будем из всего этого списка воспользоваться пробой, которая поймает наш printf:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
BEGIN&amp;#160;{&lt;br /&gt;
	printf&amp;#40;&quot;Target&amp;#160;pid&amp;#58;&amp;#160;%d\n&quot;,&amp;#160;$target&amp;#41;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pid$target&amp;#58;&amp;#58;printf&amp;#58;entry&amp;#160;{&lt;br /&gt;
	printf&amp;#40;&quot;%s&amp;#58;%s&amp;#58;%s&amp;#58;%s\n&quot;,&amp;#160;probeprov,&amp;#160;probemod,&amp;#160;probefunc,&amp;#160;probename&amp;#41;;&lt;br /&gt;
	printf&amp;#40;&quot;Argument&amp;#58;&amp;#160;%s\n&quot;,&amp;#160;copyinstr&amp;#40;arg0&amp;#41;&amp;#41;;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Если запустить этот скрипт и передать ему нашу hello, как и в первом примере, то получится вот что:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;$&amp;#160;./pid-printf.d&amp;#160;-c&amp;#160;./hello&lt;br /&gt;
Target&amp;#160;pid&amp;#58;&amp;#160;1201&lt;br /&gt;
Hello,&amp;#160;world!&lt;br /&gt;
pid1201&amp;#58;libc.so.1&amp;#58;printf&amp;#58;entry&lt;br /&gt;
Argument&amp;#58;&amp;#160;Hello,&amp;#160;world!&lt;/div&gt; 
    </content:encoded>

    <pubDate>Sat, 26 Feb 2005 23:52:58 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2005/02/dtrace_pid_provider</guid>
    <category>dtrace</category>
<category>dtrace</category>

</item>
<item>
    <title>Релиз исходного кода DTrace</title>
    <link>http://solaris.reys.net/2005/01/dtrace_open_sourced</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2005/01/dtrace_open_sourced#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=48</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=48</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Итак, открытие OpenSolaris.Org состоялось! &lt;br /&gt;
&lt;br /&gt;
Но, как и ожидалось, исходники самой операционной системы пока недоступны. В то же время, чтобы доказать серьёзность намерений, разработчикам уже предоставили доступ к исходникам &lt;b&gt;DTrace&lt;/b&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=698&amp;amp;entry_id=48&quot; title=&quot;http://blogs.sun.com/bmc&quot;  onmouseover=&quot;window.status=&#039;http://blogs.sun.com/bmc&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Bryan Cantrill&lt;/a&gt; сегодня добавил очень интересную запись в свой блог, советую почитать: &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=699&amp;amp;entry_id=48&quot; title=&quot;http://blogs.sun.com/roller/page/bmc/20050125&quot;  onmouseover=&quot;window.status=&#039;http://blogs.sun.com/roller/page/bmc/20050125&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Solaris 10 Revealed&lt;/a&gt;. 
    </content:encoded>

    <pubDate>Tue, 25 Jan 2005 19:49:17 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2005/01/dtrace_open_sourced</guid>
    <category>dtrace</category>
<category>opensolaris</category>
<category>dtrace</category>
<category>opensolaris</category>

</item>
<item>
    <title>DTrace: агрегирующие функции (агрегации)</title>
    <link>http://solaris.reys.net/2005/01/dtrace_aggregates</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2005/01/dtrace_aggregates#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=45</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=45</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Очень часто при наблюдении за производительностью системы важно знать не каждый конкретный случай, когда выполняется та или иная проба DTrace, а видеть общую картину . Например, наблюдая за каким-то процессом, поедающим процессорное время согласно &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=707&amp;amp;entry_id=45&quot; title=&quot;http://docs.sun.com/app/docs/doc/816-5166/6mbb1kqc9?q=prstat&amp;amp;a=view&quot;  onmouseover=&quot;window.status=&#039;http://docs.sun.com/app/docs/doc/816-5166/6mbb1kqc9?q=prstat&amp;amp;a=view&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;prstat&lt;/a&gt;, мы задаём себе вопрос: а чем же занимается этот процесс? И часто под этим вопросом мы имеем в виду не конкретно каждый системный вызов, выполняемый процессом, а количество этих вызовов. &lt;br /&gt;
&lt;br /&gt;
Агрегации DTrace как раз и созданы для ответов на подобные вопросы.  Оперируя c числовыми наборами данных, агрегирующие функции помогают нам легко определять средние, максимальные и минимальные величины, подсчитывать количество и сумму элементов набора и распределения частот элементов.&lt;br /&gt;
&lt;br /&gt;
Подробнее об агрегирующих функциях можно прочесть &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=708&amp;amp;entry_id=45&quot; title=&quot;http://docs.sun.com/app/docs/doc/817-6223/6mlkidlh7?q=target&amp;amp;a=view&quot;  onmouseover=&quot;window.status=&#039;http://docs.sun.com/app/docs/doc/817-6223/6mlkidlh7?q=target&amp;amp;a=view&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;здесь&lt;/a&gt;, а сегодня я лишь приведу один из примеров.&lt;br /&gt;
&lt;br /&gt;
DTrace хранит результаты выполнения агрегирующих функций в объектах, которые и называются агрегациями.&lt;br /&gt;
&lt;br /&gt;
Синтаксис определения агрегации таков:&lt;br /&gt;
&lt;b&gt;@name[ keys ] = aggfunc ( args );&lt;/b&gt;&lt;br /&gt;
здесь:&lt;br /&gt;
&lt;b&gt;name&lt;/b&gt; - название нашей агрегации&lt;br /&gt;
&lt;b&gt;keys&lt;/b&gt; - ключи-индексы агрегации, очень похожи на знакомые многим ключи ассоциативных массивом&lt;br /&gt;
&lt;b&gt;aggfunc&lt;/b&gt; - агрегирующая функция&lt;br /&gt;
&lt;b&gt;args&lt;/b&gt; - аргументы функции, обычно это числовой ряд&lt;br /&gt;
&lt;br /&gt;
В сегодняшнем примере я использую агрегирующую функцию sum, которая, как видно из названия, вычисляет сумму элементов указанного числового ряда.&lt;br /&gt;
&lt;br /&gt;
В памяти хранится лишь текущее значение агрегирующей функции, вычисленное на основе предыдущих значений аргументов, к которому применяется эта же функция для текущего значения аргумента.&lt;br /&gt;
&lt;br /&gt;
Для поверхностного анализа можно использовать меньше ключей для нашей агрегации - например, только pid, без указания thread&#039;ов, или даже execname - но в этом случае следует помнить, что в системе может быть запущено более одного процесса с одним и тем же именем. Тем не менее, подобные агрегации помогают однозначно сказать, на что же тратится больше всего внимания: &lt;br /&gt;
&lt;br /&gt;
Скрипт:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
syscall&amp;#58;&amp;#58;&amp;#58;entry&lt;br /&gt;
{&lt;br /&gt;
	self-&amp;#62;ts=timestamp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
syscall&amp;#58;&amp;#58;&amp;#58;return&lt;br /&gt;
{&lt;br /&gt;
	self-&amp;#62;elapsed&amp;#160;=&amp;#160;timestamp&amp;#160;-&amp;#160;self-&amp;#62;ts;&lt;br /&gt;
	@time&amp;#91;execname&amp;#93;=sum&amp;#40;self-&amp;#62;elapsed&amp;#41;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
END&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printf&amp;#40;&quot;\n%20s&amp;#160;%20s\n&quot;,&amp;#160;&lt;br /&gt;
		&quot;Execname&quot;,&amp;#160;&quot;Time&amp;#160;elapsed&quot;&amp;#41;;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printa&amp;#40;&quot;%20s&amp;#160;%20@u\n&quot;,&amp;#160;@time&amp;#41;;&lt;br /&gt;
}&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Сохраните этот код в файл, сделайте ему &lt;b&gt;chmod a+x&lt;/b&gt; и запускайте.  Получите примерно такой результат:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Execname&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Time&amp;#160;elapsed&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;xscreensaver&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;5710&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;gnome-smproxy&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;6886&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;wnck-applet&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;7735&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;gnome-panel&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;52032&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;metacity&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;54430&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;gnome-settings-d&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;60419&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;vim&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;66452&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;mixer_applet2&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;670078802&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;gnome-netstatus-&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;819836799&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;nautilus&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;900025830&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Xorg&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1074783431&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;gnome-terminal&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1074816530&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;firefox-bin&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;2000076871&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;dtrace&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;9843796821648&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Время в последней таблице приведено в наносекундах, так что не пугайтесь таким огромным числам :) Для засекания времени во время выполнения скрипта очень удобно использовать приведённую в примере переменную &lt;b&gt;timestamp&lt;/b&gt;. Это счётчик наносекунд, который начинает отсчёт с произвольного числа, и потому может применяться только для относительных подсчётов времени. &lt;br /&gt;
&lt;br /&gt;
Вот тут-то и становится понятно, сколько всего ненужного происходит в секунду на моём лаптопе с запущенным Gnome ;)&lt;br /&gt;
&lt;br /&gt;
Далее можно немного усложнить скрипт, и получится мощный инструмент для подробного анализа, кто, чем, и как долго занимался:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
syscall&amp;#58;&amp;#58;&amp;#58;entry&lt;br /&gt;
{&lt;br /&gt;
	self-&amp;#62;ts=timestamp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
syscall&amp;#58;&amp;#58;&amp;#58;return&lt;br /&gt;
{&lt;br /&gt;
	self-&amp;#62;elapsed&amp;#160;=&amp;#160;timestamp&amp;#160;-&amp;#160;self-&amp;#62;ts;&lt;br /&gt;
	@time&amp;#91;execname,probefunc,pid,tid&amp;#93;=sum&amp;#40;self-&amp;#62;elapsed&amp;#41;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
END&lt;br /&gt;
{&lt;br /&gt;
	printf&amp;#40;&quot;\n%20s&amp;#160;%20s&amp;#160;%8s&amp;#160;%7s&amp;#160;%20s\n&quot;,&amp;#160;&lt;br /&gt;
		&quot;Execname&quot;,&amp;#160;&quot;Syscall&quot;,&amp;#160;&quot;Process&quot;,&amp;#160;&quot;Thread&quot;,&amp;#160;&quot;Time&amp;#160;elapsed&quot;&amp;#41;;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printa&amp;#40;&quot;%20s&amp;#160;%20s&amp;#160;%8d&amp;#160;%7d&amp;#160;%20@u\n&quot;,&amp;#160;@time&amp;#41;;&lt;br /&gt;
}&amp;#160;&amp;#160;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Сохранив этот код в файл syscalls.d и запустив этот скрипт,  вы получите примерно следующий результат (дабы не засорять блог, я удалил часть строк):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;&amp;#160;&amp;#160;Execname&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Syscall&amp;#160;&amp;#160;Process&amp;#160;&amp;#160;Thread&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Time&amp;#160;elapsed&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;gnome-terminal&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;read&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;7199&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;12867&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Xorg&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;read&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;6953&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;13769&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;dtrace&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;brk&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;7331&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;33647&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;dtrace&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;schedctl&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;7331&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;39320&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;gnome-terminal&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;write&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;7199&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;48052&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Xorg&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;writev&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;6953&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;57112&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;gnome-terminal&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pollsys&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;7199&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;646816&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;dtrace&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;lwp_park&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;7331&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;44817217&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Xorg&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pollsys&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;6953&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;46936244&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;dtrace&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;ioctl&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;7331&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;9269224066655&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Если оставить такой скрипт запущенным на пару минут, в результате получится длинный список, содержащий все процессы, запущенные в системе, со всеми системными вызовами, которые они выполняли, и с указанием времени, потраченного на эти вызовы каждым thread&#039;ом. 
    </content:encoded>

    <pubDate>Wed, 12 Jan 2005 19:26:30 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2005/01/dtrace_aggregates</guid>
    <category>dtrace</category>
<category>dtrace</category>

</item>
<item>
    <title>DTrace: Макро-переменная $target</title>
    <link>http://solaris.reys.net/2005/01/dtrace_target_macro_variable</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2005/01/dtrace_target_macro_variable#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=43</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=43</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Макро-переменные способны сильно упростить вашу жизнь при написании скриптов DTrace. Их имена начинаются со знака &lt;b&gt;$&lt;/b&gt;,  и при чтении вашего скрипта DTrace&gt; автоматически заменит макро-переменные их соответствующими значениями.&lt;br /&gt;
&lt;br /&gt;
Полный список макро-переменных можно прочесть &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=710&amp;amp;entry_id=43&quot; title=&quot;http://docs.sun.com/app/docs/doc/817-6223/6mlkidlim?q=target&amp;amp;a=view#chp-script-2&quot;  onmouseover=&quot;window.status=&#039;http://docs.sun.com/app/docs/doc/817-6223/6mlkidlim?q=target&amp;amp;a=view#chp-script-2&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;здесь&lt;/a&gt;, а я рассмотрю в этот раз лишь одну из таких переменных: &lt;b&gt;$target&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;$target&lt;/b&gt; указывает на PID процесса, указанного в командной строке DTrace-скрипта. &lt;br /&gt;
&lt;br /&gt;
DTrace имеет две полезных опции командной строки, которые вы можете указывать не только при использовании собственно команды dtrace, но и при вызове DTrace-скриптов:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;./script.d -c xterm&lt;/b&gt;&lt;br /&gt;
Эта команда укажет на то, что DTrace следует выполнить указанную после ключа -c команду, и уже потом  обработать текст DTrace-скрипта в файле script.d. При этом макро-переменная &lt;b&gt;$target&lt;/b&gt; будет содержать PID процесса запущенной команды - xterm в нашем примере.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;./script.d -p 654&lt;/b&gt;&lt;br /&gt;
Это аналогичный вариант выполнения DTrace скрипта, только вместо запуска команды мы лишь сообщаем DTrace, какой именно уже запущенный в системе процесс нас интересует. &lt;b&gt;$target&lt;/b&gt; и будет содержать PID указанный в командной сроке.&lt;br /&gt;
&lt;br /&gt;
Использовать макро-переменную &lt;b&gt;$target&lt;/b&gt; можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
syscall&amp;#58;&amp;#58;&amp;#58;entry,&amp;#160;syscall&amp;#58;&amp;#58;&amp;#58;return&lt;br /&gt;
/pid&amp;#160;==&amp;#160;$target/&lt;br /&gt;
{&lt;br /&gt;
printf&amp;#40;&quot;%d/%d&amp;#58;&amp;#160;%s&amp;#58;%s\n&quot;,&amp;#160;pid,&amp;#160;tid,&amp;#160;probefunc,&amp;#160;probename&amp;#41;;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Если мы запустим этот скрипт как в первом примере, то получим примерно следующий результат:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;./script.d&amp;#160;-c&amp;#160;xterm&lt;br /&gt;
26525/1&amp;#58;&amp;#160;munmap&amp;#58;entry&lt;br /&gt;
26525/1&amp;#58;&amp;#160;munmap&amp;#58;return&lt;br /&gt;
26525/1&amp;#58;&amp;#160;mmap&amp;#58;entry&lt;br /&gt;
26525/1&amp;#58;&amp;#160;mmap&amp;#58;return&lt;br /&gt;
26525/1&amp;#58;&amp;#160;setcontext&amp;#58;entry&lt;br /&gt;
26525/1&amp;#58;&amp;#160;setcontext&amp;#58;return&lt;br /&gt;
26525/1&amp;#58;&amp;#160;getrlimit&amp;#58;entry&lt;br /&gt;
26525/1&amp;#58;&amp;#160;getrlimit&amp;#58;return&lt;br /&gt;
26525/1&amp;#58;&amp;#160;getpid&amp;#58;entry&lt;br /&gt;
26525/1&amp;#58;&amp;#160;getpid&amp;#58;return&lt;br /&gt;
...&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Чуть позже я расскажу про агрегации - ещё одну замечательную возможность сбора данных в DTrace, и тогда можно будет приводить примеры скриптов поинтереснее ;) 
    </content:encoded>

    <pubDate>Fri, 07 Jan 2005 18:34:22 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2005/01/dtrace_target_macro_variable</guid>
    <category>dtrace</category>
<category>dtrace</category>

</item>
<item>
    <title>Подробности о том, как работает DTrace</title>
    <link>http://solaris.reys.net/2005/01/how_dtrace_works</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2005/01/how_dtrace_works#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=39</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=39</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Заглянул в очередной раз на &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=715&amp;amp;entry_id=39&quot; title=&quot;http://www.sun.com/bigadmin/content/dtrace/&quot;  onmouseover=&quot;window.status=&#039;http://www.sun.com/bigadmin/content/dtrace/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;BigAdmin: DTrace&lt;/a&gt;, и наткнулся снова на &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=721&amp;amp;entry_id=39&quot; title=&quot;http://www.sun.com/bigadmin/content/dtrace/dtrace_usenix.pdf&quot;  onmouseover=&quot;window.status=&#039;http://www.sun.com/bigadmin/content/dtrace/dtrace_usenix.pdf&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;эту полезную ссылку&lt;/a&gt; - и решил-таки подчеркнуть её полезность.&lt;br /&gt;
&lt;br /&gt;
Ссылка эта ведёт на pdf-файл с докладом трёх авторов &lt;b&gt;DTrace&lt;/b&gt; - &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=717&amp;amp;entry_id=39&quot; title=&quot;http://blogs.sun.com/bmc&quot;  onmouseover=&quot;window.status=&#039;http://blogs.sun.com/bmc&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Bryan M. Cantrill&lt;/a&gt;, &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=718&amp;amp;entry_id=39&quot; title=&quot;http://www.sun.com/bigadmin/cgi/xpertApp.cgi?xpert=dtraceteam&amp;amp;action=bio&quot;  onmouseover=&quot;window.status=&#039;http://www.sun.com/bigadmin/cgi/xpertApp.cgi?xpert=dtraceteam&amp;amp;action=bio&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Michael W. Shapiro&lt;/a&gt; и &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=719&amp;amp;entry_id=39&quot; title=&quot;http://blogs.sun.com/ahl&quot;  onmouseover=&quot;window.status=&#039;http://blogs.sun.com/ahl&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Adam H. Leventhal&lt;/a&gt; на последней конференции &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=720&amp;amp;entry_id=39&quot; title=&quot;http://www.usenix.org/events/usenix04/index.html&quot;  onmouseover=&quot;window.status=&#039;http://www.usenix.org/events/usenix04/index.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;USENIX&lt;/a&gt;. Называется этот документ так: &lt;a href=&quot;http://solaris.reys.net/exit.php?url_id=721&amp;amp;entry_id=39&quot; title=&quot;http://www.sun.com/bigadmin/content/dtrace/dtrace_usenix.pdf&quot;  onmouseover=&quot;window.status=&#039;http://www.sun.com/bigadmin/content/dtrace/dtrace_usenix.pdf&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Dynamic Instrumentation of Production Systems.&lt;/a&gt;&lt;br /&gt;
Помимо перечисления достоинств &lt;b&gt;DTrace&lt;/b&gt;, дано довольно подробное концептуальное описание механизмов динамической отладки с помощью &lt;b&gt;DTrace&lt;/b&gt; - так что очень рекомендую почитать. 
    </content:encoded>

    <pubDate>Thu, 06 Jan 2005 01:12:57 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2005/01/how_dtrace_works</guid>
    <category>dtrace</category>
<category>dtrace</category>

</item>
<item>
    <title>Опции DTrace: flowindent</title>
    <link>http://solaris.reys.net/2004/12/dtrace_flowindent</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2004/12/dtrace_flowindent#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=35</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=35</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    Одна из самых полезных для меня возможностей в DTrace - это опция &lt;b&gt;flowindent&lt;/b&gt;. Всё, что она делает - это отмечает вход в какую-нибудь функцию с помощью знаков &quot;-&gt;&quot;, и выход из этой же функции знаками &quot;&lt;-&quot;. Казалось бы, что может быть проще - а вы только посмотрите, насколько приятнее выглядит результат!&lt;br /&gt;
&lt;br /&gt;
Данный пример ловит все пробы провайдера fbt. В режиме по умолчанию (а мы будем находиться именно в нём, раз никакими опциями ничего не меняем кроме flowindent) DTrace регистрирует указанные пробы и выводит информацию, когда регистрация этих проб произошла.&lt;br /&gt;
&lt;br /&gt;
Код скрипта:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
&lt;br /&gt;
fbt&amp;#58;&amp;#58;&amp;#58;&lt;br /&gt;
/execname&amp;#160;==&amp;#160;&quot;dtrace&quot;/&lt;br /&gt;
{&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
И вот какой мы получаем результат:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;dtrace&amp;#58;&amp;#160;script&amp;#160;&#039;./try5.d&#039;&amp;#160;matched&amp;#160;32659&amp;#160;probes&lt;br /&gt;
CPU&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;ID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;FUNCTION&amp;#58;NAME&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;2027&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;xc_sync&amp;#58;entry&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;819&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;xc_do_call&amp;#58;entry&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;1210&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;mutex_vector_enter&amp;#58;entry&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;1238&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;lock_set_spl&amp;#58;entry&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;2353&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;splx&amp;#58;entry&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;15484&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;apic_setspl&amp;#58;entry&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;15485&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;apic_setspl&amp;#58;return&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;2354&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;splx&amp;#58;return&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;1239&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;lock_set_spl&amp;#58;return&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;1211&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;mutex_vector_enter&amp;#58;return&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;821&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;xc_common&amp;#58;entry&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;15510&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;apic_send_ipi&amp;#58;entry&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;15511&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;apic_send_ipi&amp;#58;return&amp;#160;&lt;br /&gt;
...&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Стоит лишь добавить к этому скрипту опцию &lt;b&gt;flowindent&lt;/b&gt; (это, кстати, можно также сделать просто добавив -F как параметр командной строки), как ход исполнения кода становится гораздо понятнее:&lt;br /&gt;
&lt;br /&gt;
Новый скрипт:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;flowindent&lt;br /&gt;
&lt;br /&gt;
fbt&amp;#58;&amp;#58;&amp;#58;&lt;br /&gt;
/execname&amp;#160;==&amp;#160;&quot;dtrace&quot;/&lt;br /&gt;
{&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
И результат:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;dtrace&amp;#58;&amp;#160;script&amp;#160;&#039;./try5.d&#039;&amp;#160;matched&amp;#160;32659&amp;#160;probes&lt;br /&gt;
CPU&amp;#160;FUNCTION&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;-&amp;#62;&amp;#160;xc_sync&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;-&amp;#62;&amp;#160;xc_do_call&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;-&amp;#62;&amp;#160;mutex_vector_enter&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;-&amp;#62;&amp;#160;lock_set_spl&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;-&amp;#62;&amp;#160;splx&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;-&amp;#62;&amp;#160;apic_setspl&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#60;-&amp;#160;apic_setspl&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#60;-&amp;#160;splx&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#60;-&amp;#160;lock_set_spl&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#60;-&amp;#160;mutex_vector_enter&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;-&amp;#62;&amp;#160;xc_common&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;-&amp;#62;&amp;#160;apic_send_ipi&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#60;-&amp;#160;apic_send_ipi&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
...&lt;/div&gt; 
    </content:encoded>

    <pubDate>Tue, 14 Dec 2004 19:26:42 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2004/12/dtrace_flowindent</guid>
    <category>dtrace</category>
<category>dtrace</category>

</item>
<item>
    <title>Предикаты в DTrace</title>
    <link>http://solaris.reys.net/2004/10/dtrace_predicates</link>
            <category>DTrace</category>
    
    <comments>http://solaris.reys.net/2004/10/dtrace_predicates#comments</comments>
    <wfw:comment>http://solaris.reys.net/wfwcomment.php?cid=32</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://solaris.reys.net/rss.php?version=2.0&amp;type=comments&amp;cid=32</wfw:commentRss>
    

    <author>nospam@example.com (Gleb Reys)</author>
    <content:encoded>
    В DTrace нет условных операторных скобок типа &lt;b&gt;if..then..else&lt;/b&gt;, вместо них используются &lt;u&gt;предикаты&lt;/u&gt;. &lt;br /&gt;
&lt;b&gt;Предикат&lt;/b&gt; - это заключённые в слэши (&lt;b&gt;/&lt;/b&gt;) условия, приводимые сразу после строки объявления той или иной пробы, и предназначенные для контроля за необходимостью выполнения кода, относящегося к этой пробе.&lt;br /&gt;
&lt;br /&gt;
Скажем, следующий скрипт выведет список всех системных вызовов, кроме write, для всех процессов, запущенных на системе. Так как DTrace отслеживает события на уровне thread&#039;ов, в примере запуска этого скрипта видно, что некоторые иднентификаторы процессов повторяются. Это потому что пробы сработали для различных thread&#039;ов одного и того же процесса:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
syscall&amp;#58;&amp;#58;&amp;#58;&lt;br /&gt;
/probefunc&amp;#160;!=&amp;#160;&quot;write&quot;/&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printf&amp;#40;&quot;probefunc&amp;#58;&amp;#160;%s,&amp;#160;pid&amp;#58;&amp;#160;%d,&amp;#160;execname&amp;#58;&amp;#160;%s\n&quot;,&amp;#160;probefunc,&amp;#160;pid,&amp;#160;execname&amp;#41;;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
После запуска скрипта вы увидите примерно следующее:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;probefunc&amp;#58;&amp;#160;ioctl,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;ioctl,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;ioctl,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;ioctl,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;ioctl,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;sysconfig,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;sysconfig,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;sysconfig,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;sysconfig,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;sigaction,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;sigaction,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;sigaction,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
probefunc&amp;#58;&amp;#160;sigaction,&amp;#160;pid&amp;#58;&amp;#160;28603,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;br /&gt;
...&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. скрипт учёл и системные вызовы, выполненные командой dtrace, которая выполняла скрипт. Для того, чтобы исключить эту команду из нашей статистики, следует изменить предикат:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;/probefunc&amp;#160;!=&amp;#160;&quot;write&quot;&amp;#160;&amp;amp;&amp;amp;&amp;#160;execname&amp;#160;!=&amp;#160;&quot;dtrace&quot;/&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
и тогда вывод команды будет включать уже все другие процессы, кроме dtrace, в моём примере это парочка моих терминалов rxvt и java:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;probefunc&amp;#58;&amp;#160;pollsys,&amp;#160;pid&amp;#58;&amp;#160;28411,&amp;#160;execname&amp;#58;&amp;#160;rxvt&lt;br /&gt;
probefunc&amp;#58;&amp;#160;ioctl,&amp;#160;pid&amp;#58;&amp;#160;28411,&amp;#160;execname&amp;#58;&amp;#160;rxvt&lt;br /&gt;
probefunc&amp;#58;&amp;#160;ioctl,&amp;#160;pid&amp;#58;&amp;#160;28411,&amp;#160;execname&amp;#58;&amp;#160;rxvt&lt;br /&gt;
probefunc&amp;#58;&amp;#160;pollsys,&amp;#160;pid&amp;#58;&amp;#160;28411,&amp;#160;execname&amp;#58;&amp;#160;rxvt&lt;br /&gt;
probefunc&amp;#58;&amp;#160;pollsys,&amp;#160;pid&amp;#58;&amp;#160;28406,&amp;#160;execname&amp;#58;&amp;#160;rxvt&lt;br /&gt;
probefunc&amp;#58;&amp;#160;ioctl,&amp;#160;pid&amp;#58;&amp;#160;28406,&amp;#160;execname&amp;#58;&amp;#160;rxvt&lt;br /&gt;
probefunc&amp;#58;&amp;#160;ioctl,&amp;#160;pid&amp;#58;&amp;#160;28406,&amp;#160;execname&amp;#58;&amp;#160;rxvt&lt;br /&gt;
probefunc&amp;#58;&amp;#160;pollsys,&amp;#160;pid&amp;#58;&amp;#160;28406,&amp;#160;execname&amp;#58;&amp;#160;rxvt&lt;br /&gt;
probefunc&amp;#58;&amp;#160;lwp_cond_wait,&amp;#160;pid&amp;#58;&amp;#160;27870,&amp;#160;execname&amp;#58;&amp;#160;java_vm&lt;br /&gt;
probefunc&amp;#58;&amp;#160;lwp_cond_signal,&amp;#160;pid&amp;#58;&amp;#160;27870,&amp;#160;execname&amp;#58;&amp;#160;java_vm&lt;br /&gt;
probefunc&amp;#58;&amp;#160;lwp_cond_signal,&amp;#160;pid&amp;#58;&amp;#160;27870,&amp;#160;execname&amp;#58;&amp;#160;java_vm&lt;br /&gt;
probefunc&amp;#58;&amp;#160;lwp_cond_wait,&amp;#160;pid&amp;#58;&amp;#160;27870,&amp;#160;execname&amp;#58;&amp;#160;java_vm&lt;br /&gt;
...&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
В выражениях предикатов могут использоваться любые константы и переменные, ранее использовавшиеся в коде, или стандартные переменные, как в приведённых примерах. А если учесть, что локальные переменные уникальны для каждого thread&#039;а процесса, то можно строить и конструкции посложнее...&lt;br /&gt;
&lt;br /&gt;
Локальные для каждого thread&#039;а переменные объявляются с помощью оператора &lt;b&gt;-&gt;&lt;/b&gt; специального идентификатора &lt;b&gt;self&lt;/b&gt;, например: &lt;b&gt;self-&gt;flag = 1;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Приведённые ниже пример выведет лишь по одному сообщению про системный вызов write каждого из thread&#039;ов всех процессов, выполняющих этот вызов. Как видно из кода, едва мы сообщаем об очередном thread&#039;е, который мы уличили в завершении системного вызова write, мы тут же отмечаем в локальной для этого thread&#039;а переменной, что он уже был обработан: &lt;b&gt;self-&gt;processed = 1;&lt;/b&gt;. А предикат уже позаботится о том, чтобы в следующий раз для уже отмеченного thread&#039;а мы не выполняли код нашей пробы:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;#!/usr/sbin/dtrace&amp;#160;-s&lt;br /&gt;
#pragma&amp;#160;D&amp;#160;option&amp;#160;quiet&lt;br /&gt;
&lt;br /&gt;
syscall&amp;#58;&amp;#58;write&amp;#58;return&lt;br /&gt;
/&amp;#160;self-&amp;#62;processed&amp;#160;==&amp;#160;0/&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;printf&amp;#40;&quot;tid&amp;#58;&amp;#160;%d,&amp;#160;pid&amp;#58;&amp;#160;%d,&amp;#160;execname&amp;#58;&amp;#160;%s\n&quot;,&amp;#160;tid,&amp;#160;pid,&amp;#160;execname&amp;#41;;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;self-&amp;#62;processed&amp;#160;=&amp;#160;1;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Как видно, каждый thread был зарегистрирован только один раз:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;tid&amp;#58;&amp;#160;1,&amp;#160;pid&amp;#58;&amp;#160;21583,&amp;#160;execname&amp;#58;&amp;#160;soffice.bin&lt;br /&gt;
tid&amp;#58;&amp;#160;4,&amp;#160;pid&amp;#58;&amp;#160;21750,&amp;#160;execname&amp;#58;&amp;#160;thunderbird-bin&lt;br /&gt;
tid&amp;#58;&amp;#160;4,&amp;#160;pid&amp;#58;&amp;#160;27406,&amp;#160;execname&amp;#58;&amp;#160;mozilla-bin&lt;br /&gt;
tid&amp;#58;&amp;#160;1,&amp;#160;pid&amp;#58;&amp;#160;27406,&amp;#160;execname&amp;#58;&amp;#160;mozilla-bin&lt;br /&gt;
tid&amp;#58;&amp;#160;1,&amp;#160;pid&amp;#58;&amp;#160;21450,&amp;#160;execname&amp;#58;&amp;#160;icewm&lt;br /&gt;
tid&amp;#58;&amp;#160;4,&amp;#160;pid&amp;#58;&amp;#160;21583,&amp;#160;execname&amp;#58;&amp;#160;soffice.bin&lt;br /&gt;
tid&amp;#58;&amp;#160;1,&amp;#160;pid&amp;#58;&amp;#160;21750,&amp;#160;execname&amp;#58;&amp;#160;thunderbird-bin&lt;br /&gt;
tid&amp;#58;&amp;#160;1,&amp;#160;pid&amp;#58;&amp;#160;28636,&amp;#160;execname&amp;#58;&amp;#160;dtrace&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Всех способов использования предикатов не расскажешь в одной записи, так что в следующий раз я постараюсь показать ещё несколько вариантов использования этой замечательной возможности DTrace. 
    </content:encoded>

    <pubDate>Fri, 10 Dec 2004 19:52:52 +0300</pubDate>
    <guid isPermaLink="false">http:/solaris.reys.net/2004/10/dtrace_predicates</guid>
    <category>dtrace</category>
<category>dtrace</category>

</item>

</channel>
</rss>