Add the remaining scripts from the DTraceToolkit, version 0.99, to the
vendor tree. http://www.brendangregg.com/dtrace.html#DTraceToolkit
This commit is contained in:
parent
87c8f7aa3a
commit
055173dba4
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/dtracetoolkit/dist/; revision=235368 svn path=/vendor/dtracetoolkit/dtracetoolkit-20120512/; revision=235374; tag=vendor/dtracetoolkit/dtracetoolkit-20120512
5
Apps/Readme
Normal file
5
Apps/Readme
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Apps - Specific Application based analysis
|
||||||
|
|
||||||
|
These are DTrace scripts that are written to analyse a particular
|
||||||
|
application or applictaion layer protocol. For example, Apache or NFS
|
||||||
|
scripts would appear here.
|
132
Apps/httpdstat.d
Executable file
132
Apps/httpdstat.d
Executable file
@ -0,0 +1,132 @@
|
|||||||
|
#!/usr/sbin/dtrace -s
|
||||||
|
/*
|
||||||
|
* httpdstat.d - realtime httpd statistics. Uses DTrace.
|
||||||
|
*
|
||||||
|
* $Id: httpdstat.d 2 2007-08-01 10:01:43Z brendan $
|
||||||
|
*
|
||||||
|
* USAGE: httpdstat.d [interval [count]]
|
||||||
|
*
|
||||||
|
* interval seconds
|
||||||
|
* count number of samples
|
||||||
|
*
|
||||||
|
* FIELDS:
|
||||||
|
* TIME Time, string
|
||||||
|
* NUM Number of connections
|
||||||
|
* GET Number of "GET"s
|
||||||
|
* POST Number of "POST"s
|
||||||
|
* HEAD Number of "HEAD"s
|
||||||
|
* TRACE Number of "TRACE"s
|
||||||
|
*
|
||||||
|
* All of the statistics are printed as a value per interval (not per second).
|
||||||
|
*
|
||||||
|
* NOTE: This version does not process subsequent operations on keepalives.
|
||||||
|
*
|
||||||
|
* IDEA: Ryan Matteson (who first wrote a solution to this).
|
||||||
|
*
|
||||||
|
* COPYRIGHT: Copyright (c) 2005 Brendan Gregg.
|
||||||
|
*
|
||||||
|
* CDDL HEADER START
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the terms of the
|
||||||
|
* Common Development and Distribution License, Version 1.0 only
|
||||||
|
* (the "License"). You may not use this file except in compliance
|
||||||
|
* with the License.
|
||||||
|
*
|
||||||
|
* You can obtain a copy of the license at Docs/cddl1.txt
|
||||||
|
* or http://www.opensolaris.org/os/licensing.
|
||||||
|
* See the License for the specific language governing permissions
|
||||||
|
* and limitations under the License.
|
||||||
|
*
|
||||||
|
* CDDL HEADER END
|
||||||
|
*
|
||||||
|
* 20-Nov-2005 Brendan Gregg Created this.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma D option quiet
|
||||||
|
#pragma D option defaultargs
|
||||||
|
|
||||||
|
inline int SCREEN = 21;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Program Start
|
||||||
|
*/
|
||||||
|
dtrace:::BEGIN
|
||||||
|
{
|
||||||
|
num = 0; get = 0; head = 0; post = 0; trac = 0;
|
||||||
|
lines = SCREEN + 1;
|
||||||
|
secs = $1 ? $1 : 1;
|
||||||
|
counts = $2 ? $2 : -1;
|
||||||
|
first = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
profile:::tick-1sec
|
||||||
|
{
|
||||||
|
secs--;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print Header
|
||||||
|
*/
|
||||||
|
dtrace:::BEGIN,
|
||||||
|
profile:::tick-1sec
|
||||||
|
/first || (secs == 0 && lines > SCREEN)/
|
||||||
|
{
|
||||||
|
printf("%-20s %6s %6s %5s %5s %5s\n", "TIME",
|
||||||
|
"NUM", "GET", "POST", "HEAD", "TRACE");
|
||||||
|
lines = 0;
|
||||||
|
first = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Track Accept Events
|
||||||
|
*/
|
||||||
|
syscall::accept:return
|
||||||
|
/execname == "httpd"/
|
||||||
|
{
|
||||||
|
self->buf = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
syscall::read:entry
|
||||||
|
/self->buf/
|
||||||
|
{
|
||||||
|
self->buf = arg1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tally Data
|
||||||
|
*/
|
||||||
|
syscall::read:return
|
||||||
|
/self->buf && arg0/
|
||||||
|
{
|
||||||
|
this->str = (char *)copyin(self->buf, arg0);
|
||||||
|
this->str[4] = '\0';
|
||||||
|
get += stringof(this->str) == "GET " ? 1 : 0;
|
||||||
|
post += stringof(this->str) == "POST" ? 1 : 0;
|
||||||
|
head += stringof(this->str) == "HEAD" ? 1 : 0;
|
||||||
|
trac += stringof(this->str) == "TRAC" ? 1 : 0;
|
||||||
|
num++;
|
||||||
|
self->buf = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print Output
|
||||||
|
*/
|
||||||
|
profile:::tick-1sec
|
||||||
|
/secs == 0/
|
||||||
|
{
|
||||||
|
printf("%-20Y %6d %6d %5d %5d %5d\n", walltimestamp,
|
||||||
|
num, get, post, head, trac);
|
||||||
|
num = 0; get = 0; head = 0; post = 0; trac = 0;
|
||||||
|
secs = $1 ? $1 : 1;
|
||||||
|
lines++;
|
||||||
|
counts--;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* End
|
||||||
|
*/
|
||||||
|
profile:::tick-1sec
|
||||||
|
/counts == 0/
|
||||||
|
{
|
||||||
|
exit(0);
|
||||||
|
}
|
102
Apps/nfswizard.d
Executable file
102
Apps/nfswizard.d
Executable file
@ -0,0 +1,102 @@
|
|||||||
|
#!/usr/sbin/dtrace -s
|
||||||
|
/*
|
||||||
|
* nfswizard.d - nfs client activity wizard.
|
||||||
|
* Written using DTrace (Solaris 10 3/05).
|
||||||
|
*
|
||||||
|
* This examines activity caused by NFS client processes on the same server
|
||||||
|
* that you are running this script on. A detailed report is generated
|
||||||
|
* to explain various details of NFS client activity, including response
|
||||||
|
* times and file access.
|
||||||
|
*
|
||||||
|
* $Id: nfswizard.d 3 2007-08-01 10:50:08Z brendan $
|
||||||
|
*
|
||||||
|
* USAGE: nfswizard.d # hit Ctrl-C to end sample
|
||||||
|
*
|
||||||
|
* COPYRIGHT: Copyright (c) 2005, 2006 Brendan Gregg.
|
||||||
|
*
|
||||||
|
* CDDL HEADER START
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the terms of the
|
||||||
|
* Common Development and Distribution License, Version 1.0 only
|
||||||
|
* (the "License"). You may not use this file except in compliance
|
||||||
|
* with the License.
|
||||||
|
*
|
||||||
|
* You can obtain a copy of the license at Docs/cddl1.txt
|
||||||
|
* or http://www.opensolaris.org/os/licensing.
|
||||||
|
* See the License for the specific language governing permissions
|
||||||
|
* and limitations under the License.
|
||||||
|
*
|
||||||
|
* CDDL HEADER END
|
||||||
|
*
|
||||||
|
* 02-Dec-2005 Brendan Gregg Created this.
|
||||||
|
* 20-Apr-2006 " " Last update.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma D option quiet
|
||||||
|
|
||||||
|
dtrace:::BEGIN
|
||||||
|
{
|
||||||
|
printf("Tracing... Hit Ctrl-C to end.\n");
|
||||||
|
scriptstart = walltimestamp;
|
||||||
|
timestart = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
io:nfs::start
|
||||||
|
{
|
||||||
|
/* tally file sizes */
|
||||||
|
@file[args[2]->fi_pathname] = sum(args[0]->b_bcount);
|
||||||
|
|
||||||
|
/* time response */
|
||||||
|
start[args[0]->b_addr] = timestamp;
|
||||||
|
|
||||||
|
/* overall stats */
|
||||||
|
@rbytes = sum(args[0]->b_flags & B_READ ? args[0]->b_bcount : 0);
|
||||||
|
@wbytes = sum(args[0]->b_flags & B_READ ? 0 : args[0]->b_bcount);
|
||||||
|
@events = count();
|
||||||
|
}
|
||||||
|
|
||||||
|
io:nfs::done
|
||||||
|
/start[args[0]->b_addr]/
|
||||||
|
{
|
||||||
|
/* calculate and save response time stats */
|
||||||
|
this->elapsed = timestamp - start[args[0]->b_addr];
|
||||||
|
@maxtime = max(this->elapsed);
|
||||||
|
@avgtime = avg(this->elapsed);
|
||||||
|
@qnztime = quantize(this->elapsed / 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
dtrace:::END
|
||||||
|
{
|
||||||
|
/* print header */
|
||||||
|
printf("NFS Client Wizard. %Y -> %Y\n\n", scriptstart, walltimestamp);
|
||||||
|
|
||||||
|
/* print read/write stats */
|
||||||
|
printa("Read: %@d bytes ", @rbytes);
|
||||||
|
normalize(@rbytes, 1000000);
|
||||||
|
printa("(%@d Mb)\n", @rbytes);
|
||||||
|
printa("Write: %@d bytes ", @wbytes);
|
||||||
|
normalize(@wbytes, 1000000);
|
||||||
|
printa("(%@d Mb)\n\n", @wbytes);
|
||||||
|
|
||||||
|
/* print throughput stats */
|
||||||
|
denormalize(@rbytes);
|
||||||
|
normalize(@rbytes, (timestamp - timestart) / 1000000);
|
||||||
|
printa("Read: %@d Kb/sec\n", @rbytes);
|
||||||
|
denormalize(@wbytes);
|
||||||
|
normalize(@wbytes, (timestamp - timestart) / 1000000);
|
||||||
|
printa("Write: %@d Kb/sec\n\n", @wbytes);
|
||||||
|
|
||||||
|
/* print time stats */
|
||||||
|
printa("NFS I/O events: %@d\n", @events);
|
||||||
|
normalize(@avgtime, 1000000);
|
||||||
|
printa("Avg response time: %@d ms\n", @avgtime);
|
||||||
|
normalize(@maxtime, 1000000);
|
||||||
|
printa("Max response time: %@d ms\n\n", @maxtime);
|
||||||
|
printa("Response times (us):%@d\n", @qnztime);
|
||||||
|
|
||||||
|
/* print file stats */
|
||||||
|
printf("Top 25 files accessed (bytes):\n");
|
||||||
|
printf(" %-64s %s\n", "PATHNAME", "BYTES");
|
||||||
|
trunc(@file, 25);
|
||||||
|
printa(" %-64s %@d\n", @file);
|
||||||
|
}
|
268
Apps/shellsnoop
Executable file
268
Apps/shellsnoop
Executable file
@ -0,0 +1,268 @@
|
|||||||
|
#!/usr/bin/sh
|
||||||
|
#
|
||||||
|
# shellsnoop - A program to print read/write details from shells,
|
||||||
|
# such as keystrokes and command outputs.
|
||||||
|
# Written using DTrace (Solaris 10 3/05).
|
||||||
|
#
|
||||||
|
# This program sounds somewhat dangerous (snooping keystrokes), but is
|
||||||
|
# no more so than /usr/bin/truss, and both need root or dtrace privileges to
|
||||||
|
# run. In fact, less dangerous, as we only print visible text (not password
|
||||||
|
# text, for example). Having said that, it goes without saying that this
|
||||||
|
# program shouldn't be used for breeching privacy of other users.
|
||||||
|
#
|
||||||
|
# This was written as a tool to demonstrate the capabilities of DTrace.
|
||||||
|
#
|
||||||
|
# $Id: shellsnoop 19 2007-09-12 07:47:59Z brendan $
|
||||||
|
#
|
||||||
|
# USAGE: shellsnoop [-hqsv] [-p PID] [-u UID]
|
||||||
|
#
|
||||||
|
# -q # quiet, only print data
|
||||||
|
# -s # include start time, us
|
||||||
|
# -v # include start time, string
|
||||||
|
# -p PID # process ID to snoop
|
||||||
|
# -u UID # user ID to snoop
|
||||||
|
# eg,
|
||||||
|
# shellsnoop # default output
|
||||||
|
# shellsnoop -v # human readable timestamps
|
||||||
|
# shellsnoop -p 1892 # snoop this PID only
|
||||||
|
# shellsnoop -qp 1892 # watch this PID data only
|
||||||
|
#
|
||||||
|
# FIELDS:
|
||||||
|
# UID User ID
|
||||||
|
# PID process ID
|
||||||
|
# PPID parent process ID
|
||||||
|
# COMM command name
|
||||||
|
# DIR direction (R read, W write)
|
||||||
|
# TEXT text contained in the read/write
|
||||||
|
# TIME timestamp for the command, us
|
||||||
|
# STRTIME timestamp for the command, string
|
||||||
|
#
|
||||||
|
# SEE ALSO: ttywatcher
|
||||||
|
#
|
||||||
|
# COPYRIGHT: Copyright (c) 2005 Brendan Gregg.
|
||||||
|
#
|
||||||
|
# CDDL HEADER START
|
||||||
|
#
|
||||||
|
# The contents of this file are subject to the terms of the
|
||||||
|
# Common Development and Distribution License, Version 1.0 only
|
||||||
|
# (the "License"). You may not use this file except in compliance
|
||||||
|
# with the License.
|
||||||
|
#
|
||||||
|
# You can obtain a copy of the license at Docs/cddl1.txt
|
||||||
|
# or http://www.opensolaris.org/os/licensing.
|
||||||
|
# See the License for the specific language governing permissions
|
||||||
|
# and limitations under the License.
|
||||||
|
#
|
||||||
|
# CDDL HEADER END
|
||||||
|
#
|
||||||
|
# Author: Brendan Gregg [Sydney, Australia]
|
||||||
|
#
|
||||||
|
# 28-Mar-2004 Brendan Gregg Created this.
|
||||||
|
# 21-Jan-2005 " " Wrapped in sh to provide options.
|
||||||
|
# 30-Nov-2005 " " Fixed trailing buffer text bug.
|
||||||
|
# 30-Nov-2005 " " Fixed sh no keystroke text in quiet bug.
|
||||||
|
# 30-Nov-2005 " " Last update.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
##############################
|
||||||
|
# --- Process Arguments ---
|
||||||
|
#
|
||||||
|
opt_pid=0; opt_uid=0; opt_time=0; opt_timestr=0; opt_quiet=0; opt_debug=0
|
||||||
|
filter=0; pid=0; uid=0
|
||||||
|
|
||||||
|
while getopts dhp:qsu:v name
|
||||||
|
do
|
||||||
|
case $name in
|
||||||
|
d) opt_debug=1 ;;
|
||||||
|
p) opt_pid=1; pid=$OPTARG ;;
|
||||||
|
q) opt_quiet=1 ;;
|
||||||
|
s) opt_time=1 ;;
|
||||||
|
u) opt_uid=1; uid=$OPTARG ;;
|
||||||
|
v) opt_timestr=1 ;;
|
||||||
|
h|?) cat <<-END >&2
|
||||||
|
USAGE: shellsnoop [-hqsv] [-p PID] [-u UID]
|
||||||
|
shellsnoop # default output
|
||||||
|
-q # quiet, only print data
|
||||||
|
-s # include start time, us
|
||||||
|
-v # include start time, string
|
||||||
|
-p PID # process ID to snoop
|
||||||
|
-u UID # user ID to snoop
|
||||||
|
END
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $opt_quiet -eq 1 ]; then
|
||||||
|
opt_time=0; opt_timestr=0
|
||||||
|
fi
|
||||||
|
if [ $opt_pid -eq 1 -o $opt_uid -eq 1 ]; then
|
||||||
|
filter=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# --- Main Program, DTrace ---
|
||||||
|
#
|
||||||
|
dtrace -n '
|
||||||
|
/*
|
||||||
|
* Command line arguments
|
||||||
|
*/
|
||||||
|
inline int OPT_debug = '$opt_debug';
|
||||||
|
inline int OPT_quiet = '$opt_quiet';
|
||||||
|
inline int OPT_pid = '$opt_pid';
|
||||||
|
inline int OPT_uid = '$opt_uid';
|
||||||
|
inline int OPT_time = '$opt_time';
|
||||||
|
inline int OPT_timestr = '$opt_timestr';
|
||||||
|
inline int FILTER = '$filter';
|
||||||
|
inline int PID = '$pid';
|
||||||
|
inline int UID = '$uid';
|
||||||
|
|
||||||
|
#pragma D option quiet
|
||||||
|
#pragma D option switchrate=20hz
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print header
|
||||||
|
*/
|
||||||
|
dtrace:::BEGIN /OPT_time == 1/
|
||||||
|
{
|
||||||
|
printf("%-14s ","TIME");
|
||||||
|
}
|
||||||
|
dtrace:::BEGIN /OPT_timestr == 1/
|
||||||
|
{
|
||||||
|
printf("%-20s ","STRTIME");
|
||||||
|
}
|
||||||
|
dtrace:::BEGIN /OPT_quiet == 0/
|
||||||
|
{
|
||||||
|
printf("%5s %5s %8s %3s %s\n", "PID", "PPID", "CMD", "DIR", "TEXT");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remember this PID is a shell child
|
||||||
|
*/
|
||||||
|
syscall::exec:entry, syscall::exece:entry
|
||||||
|
/execname == "sh" || execname == "ksh" || execname == "csh" ||
|
||||||
|
execname == "tcsh" || execname == "zsh" || execname == "bash"/
|
||||||
|
{
|
||||||
|
child[pid] = 1;
|
||||||
|
|
||||||
|
/* debug */
|
||||||
|
this->parent = (char *)curthread->t_procp->p_parent->p_user.u_comm;
|
||||||
|
OPT_debug == 1 ? printf("PID %d CMD %s started. (%s)\n",
|
||||||
|
pid, execname, stringof(this->parent)) : 1;
|
||||||
|
}
|
||||||
|
syscall::exec:entry, syscall::exece:entry
|
||||||
|
/(OPT_pid == 1 && PID != ppid) || (OPT_uid == 1 && UID != uid)/
|
||||||
|
{
|
||||||
|
/* forget if filtered */
|
||||||
|
child[pid] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print shell keystrokes
|
||||||
|
*/
|
||||||
|
syscall::write:entry, syscall::read:entry
|
||||||
|
/(execname == "sh" || execname == "ksh" || execname == "csh" ||
|
||||||
|
execname == "tcsh" || execname == "zsh" || execname == "bash")
|
||||||
|
&& (arg0 >= 0 && arg0 <= 2)/
|
||||||
|
{
|
||||||
|
self->buf = arg1;
|
||||||
|
}
|
||||||
|
syscall::write:entry, syscall::read:entry
|
||||||
|
/(OPT_pid == 1 && PID != pid) || (OPT_uid == 1 && UID != uid)/
|
||||||
|
{
|
||||||
|
self->buf = 0;
|
||||||
|
}
|
||||||
|
syscall::write:return, syscall::read:return
|
||||||
|
/self->buf && child[pid] == 0 && OPT_time == 1/
|
||||||
|
{
|
||||||
|
printf("%-14d ", timestamp/1000);
|
||||||
|
}
|
||||||
|
syscall::write:return, syscall::read:return
|
||||||
|
/self->buf && child[pid] == 0 && OPT_timestr == 1/
|
||||||
|
{
|
||||||
|
printf("%-20Y ", walltimestamp);
|
||||||
|
}
|
||||||
|
syscall::write:return, syscall::read:return
|
||||||
|
/self->buf && child[pid] == 0 && OPT_quiet == 0/
|
||||||
|
{
|
||||||
|
this->text = (char *)copyin(self->buf, arg0);
|
||||||
|
this->text[arg0] = '\'\\0\'';
|
||||||
|
|
||||||
|
printf("%5d %5d %8s %3s %s\n", pid, curpsinfo->pr_ppid, execname,
|
||||||
|
probefunc == "read" ? "R" : "W", stringof(this->text));
|
||||||
|
}
|
||||||
|
syscall::write:return
|
||||||
|
/self->buf && child[pid] == 0 && OPT_quiet == 1/
|
||||||
|
{
|
||||||
|
this->text = (char *)copyin(self->buf, arg0);
|
||||||
|
this->text[arg0] = '\'\\0\'';
|
||||||
|
printf("%s", stringof(this->text));
|
||||||
|
}
|
||||||
|
syscall::read:return
|
||||||
|
/self->buf && execname == "sh" && child[pid] == 0 && OPT_quiet == 1/
|
||||||
|
{
|
||||||
|
this->text = (char *)copyin(self->buf, arg0);
|
||||||
|
this->text[arg0] = '\'\\0\'';
|
||||||
|
printf("%s", stringof(this->text));
|
||||||
|
}
|
||||||
|
syscall::write:return, syscall::read:return
|
||||||
|
/self->buf && child[pid] == 0/
|
||||||
|
{
|
||||||
|
self->buf = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print command output
|
||||||
|
*/
|
||||||
|
syscall::write:entry, syscall::read:entry
|
||||||
|
/child[pid] == 1 && (arg0 == 1 || arg0 == 2)/
|
||||||
|
{
|
||||||
|
self->buf = arg1;
|
||||||
|
}
|
||||||
|
syscall::write:return, syscall::read:return
|
||||||
|
/self->buf && OPT_time == 1/
|
||||||
|
{
|
||||||
|
printf("%-14d ", timestamp/1000);
|
||||||
|
}
|
||||||
|
syscall::write:return, syscall::read:return
|
||||||
|
/self->buf && OPT_timestr == 1/
|
||||||
|
{
|
||||||
|
printf("%-20Y ", walltimestamp);
|
||||||
|
}
|
||||||
|
syscall::write:return, syscall::read:return
|
||||||
|
/self->buf && OPT_quiet == 0/
|
||||||
|
{
|
||||||
|
this->text = (char *)copyin(self->buf, arg0);
|
||||||
|
this->text[arg0] = '\'\\0\'';
|
||||||
|
|
||||||
|
printf("%5d %5d %8s %3s %s", pid, curpsinfo->pr_ppid, execname,
|
||||||
|
probefunc == "read" ? "R" : "W", stringof(this->text));
|
||||||
|
|
||||||
|
/* here we check if a newline is needed */
|
||||||
|
this->length = strlen(this->text);
|
||||||
|
printf("%s", this->text[this->length - 1] == '\'\\n\'' ? "" : "\n");
|
||||||
|
self->buf = 0;
|
||||||
|
}
|
||||||
|
syscall::write:return, syscall::read:return
|
||||||
|
/self->buf && OPT_quiet == 1/
|
||||||
|
{
|
||||||
|
this->text = (char *)copyin(self->buf, arg0);
|
||||||
|
this->text[arg0] = '\'\\0\'';
|
||||||
|
printf("%s", stringof(this->text));
|
||||||
|
self->buf = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cleanup
|
||||||
|
*/
|
||||||
|
syscall::rexit:entry
|
||||||
|
{
|
||||||
|
child[pid] = 0;
|
||||||
|
|
||||||
|
/* debug */
|
||||||
|
this->parent = (char *)curthread->t_procp->p_parent->p_user.u_comm;
|
||||||
|
OPT_debug == 1 ? printf("PID %d CMD %s exited. (%s)\n",
|
||||||
|
pid, execname, stringof(this->parent)) : 1;
|
||||||
|
}
|
||||||
|
'
|
186
Apps/weblatency.d
Executable file
186
Apps/weblatency.d
Executable file
@ -0,0 +1,186 @@
|
|||||||
|
#!/usr/sbin/dtrace -s
|
||||||
|
/*
|
||||||
|
* weblatency.d - website latency statistics.
|
||||||
|
* Written using DTrace (Solaris 10 3/05).
|
||||||
|
*
|
||||||
|
* $Id: weblatency.d 3 2007-08-01 10:50:08Z brendan $
|
||||||
|
*
|
||||||
|
* USAGE: weblatency.d # hit Ctrl-C to end sample
|
||||||
|
*
|
||||||
|
* See the code below for the "BROWSER" variable, which sets the browser
|
||||||
|
* to trace (currently set to "mozilla-bin").
|
||||||
|
*
|
||||||
|
* This is written as an experimental tool, and may not work at all with
|
||||||
|
* your browser.
|
||||||
|
*
|
||||||
|
* FIELDS:
|
||||||
|
* HOST Hostname from URL
|
||||||
|
* NUM Number of GETs
|
||||||
|
* AVGTIME(ms) Average time for response, ms
|
||||||
|
* MAXTIME(ms) Maximum time for response, ms
|
||||||
|
*
|
||||||
|
* NOTE:
|
||||||
|
*
|
||||||
|
* The latency measured here is from the browser sending the GET
|
||||||
|
* request to when the browser begins to recieve the response. It
|
||||||
|
* is an overall response time for the client, and encompasses
|
||||||
|
* connection speed delays, DNS lookups, proxy delays, and web server
|
||||||
|
* response time.
|
||||||
|
*
|
||||||
|
* IDEA: Bryan Cantrill (who wrote an elegant version for Sol 10 update 1)
|
||||||
|
*
|
||||||
|
* COPYRIGHT: Copyright (c) 2005, 2006 Brendan Gregg.
|
||||||
|
*
|
||||||
|
* CDDL HEADER START
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the terms of the
|
||||||
|
* Common Development and Distribution License, Version 1.0 only
|
||||||
|
* (the "License"). You may not use this file except in compliance
|
||||||
|
* with the License.
|
||||||
|
*
|
||||||
|
* You can obtain a copy of the license at Docs/cddl1.txt
|
||||||
|
* or http://www.opensolaris.org/os/licensing.
|
||||||
|
* See the License for the specific language governing permissions
|
||||||
|
* and limitations under the License.
|
||||||
|
*
|
||||||
|
* CDDL HEADER END
|
||||||
|
*
|
||||||
|
* ToDo:
|
||||||
|
* Check write fd for socket, not file.
|
||||||
|
*
|
||||||
|
* 30-Nov-2005 Brendan Gregg Created this.
|
||||||
|
* 20-Apr-2006 " " Last update.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma D option quiet
|
||||||
|
|
||||||
|
/* browser's execname */
|
||||||
|
inline string BROWSER = "mozilla-bin";
|
||||||
|
|
||||||
|
/* maximum expected hostname length + "GET http://" */
|
||||||
|
inline int MAX_REQ = 64;
|
||||||
|
|
||||||
|
dtrace:::BEGIN
|
||||||
|
{
|
||||||
|
printf("Tracing... Hit Ctrl-C to end.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Trace brower request
|
||||||
|
*
|
||||||
|
* This is achieved by matching writes for the browser's execname that
|
||||||
|
* start with "GET", and then timing from the return of the write to
|
||||||
|
* the return of the next read in the same thread. Various stateful flags
|
||||||
|
* are used: self->fd, self->read.
|
||||||
|
*
|
||||||
|
* For performance reasons, I'd like to only process writes that follow a
|
||||||
|
* connect(), however this approach fails to process keepalives.
|
||||||
|
*/
|
||||||
|
syscall::write:entry
|
||||||
|
/execname == BROWSER/
|
||||||
|
{
|
||||||
|
self->buf = arg1;
|
||||||
|
self->fd = arg0 + 1;
|
||||||
|
self->nam = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
syscall::write:return
|
||||||
|
/self->fd/
|
||||||
|
{
|
||||||
|
this->str = (char *)copyin(self->buf, MAX_REQ);
|
||||||
|
this->str[4] = '\0';
|
||||||
|
self->fd = stringof(this->str) == "GET " ? self->fd : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
syscall::write:return
|
||||||
|
/self->fd/
|
||||||
|
{
|
||||||
|
/* fetch browser request */
|
||||||
|
this->str = (char *)copyin(self->buf, MAX_REQ);
|
||||||
|
this->str[MAX_REQ] = '\0';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This unrolled loop strips down a URL to it's hostname.
|
||||||
|
* We ought to use strtok(), but it's not available on Sol 10 3/05,
|
||||||
|
* so instead I used dirname(). It's not pretty - it's done so that
|
||||||
|
* this works on all Sol 10 versions.
|
||||||
|
*/
|
||||||
|
self->req = stringof(this->str);
|
||||||
|
self->nam = strlen(self->req) > 15 ? self->req : self->nam;
|
||||||
|
self->req = dirname(self->req);
|
||||||
|
self->nam = strlen(self->req) > 15 ? self->req : self->nam;
|
||||||
|
self->req = dirname(self->req);
|
||||||
|
self->nam = strlen(self->req) > 15 ? self->req : self->nam;
|
||||||
|
self->req = dirname(self->req);
|
||||||
|
self->nam = strlen(self->req) > 15 ? self->req : self->nam;
|
||||||
|
self->req = dirname(self->req);
|
||||||
|
self->nam = strlen(self->req) > 15 ? self->req : self->nam;
|
||||||
|
self->req = dirname(self->req);
|
||||||
|
self->nam = strlen(self->req) > 15 ? self->req : self->nam;
|
||||||
|
self->req = dirname(self->req);
|
||||||
|
self->nam = strlen(self->req) > 15 ? self->req : self->nam;
|
||||||
|
self->req = dirname(self->req);
|
||||||
|
self->nam = strlen(self->req) > 15 ? self->req : self->nam;
|
||||||
|
self->req = dirname(self->req);
|
||||||
|
self->nam = strlen(self->req) > 15 ? self->req : self->nam;
|
||||||
|
self->nam = basename(self->nam);
|
||||||
|
|
||||||
|
/* start the timer */
|
||||||
|
start[pid, self->fd - 1] = timestamp;
|
||||||
|
host[pid, self->fd - 1] = self->nam;
|
||||||
|
self->buf = 0;
|
||||||
|
self->fd = 0;
|
||||||
|
self->req = 0;
|
||||||
|
self->nam = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* this one wasn't a GET */
|
||||||
|
syscall::write:return
|
||||||
|
/self->buf/
|
||||||
|
{
|
||||||
|
self->buf = 0;
|
||||||
|
self->fd = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
syscall::read:entry
|
||||||
|
/execname == BROWSER && start[pid, arg0]/
|
||||||
|
{
|
||||||
|
self->fd = arg0 + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Record host details
|
||||||
|
*/
|
||||||
|
syscall::read:return
|
||||||
|
/self->fd/
|
||||||
|
{
|
||||||
|
/* fetch details */
|
||||||
|
self->host = stringof(host[pid, self->fd - 1]);
|
||||||
|
this->start = start[pid, self->fd - 1];
|
||||||
|
|
||||||
|
/* save details */
|
||||||
|
@Avg[self->host] = avg((timestamp - this->start)/1000000);
|
||||||
|
@Max[self->host] = max((timestamp - this->start)/1000000);
|
||||||
|
@Num[self->host] = count();
|
||||||
|
|
||||||
|
/* clear vars */
|
||||||
|
start[pid, self->fd - 1] = 0;
|
||||||
|
host[pid, self->fd - 1] = 0;
|
||||||
|
self->host = 0;
|
||||||
|
self->fd = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Output report
|
||||||
|
*/
|
||||||
|
dtrace:::END
|
||||||
|
{
|
||||||
|
printf("%-32s %11s\n", "HOST", "NUM");
|
||||||
|
printa("%-32s %@11d\n", @Num);
|
||||||
|
|
||||||
|
printf("\n%-32s %11s\n", "HOST", "AVGTIME(ms)");
|
||||||
|
printa("%-32s %@11d\n", @Avg);
|
||||||
|
|
||||||
|
printf("\n%-32s %11s\n", "HOST", "MAXTIME(ms)");
|
||||||
|
printa("%-32s %@11d\n", @Max);
|
||||||
|
}
|
1
Bin/anonpgpid.d
Symbolic link
1
Bin/anonpgpid.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Mem/anonpgpid.d
|
1
Bin/bitesize.d
Symbolic link
1
Bin/bitesize.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Disk/bitesize.d
|
1
Bin/connections
Symbolic link
1
Bin/connections
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Net/connections
|
1
Bin/cpudists
Symbolic link
1
Bin/cpudists
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Kernel/cpudists
|
1
Bin/cputimes
Symbolic link
1
Bin/cputimes
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Kernel/cputimes
|
1
Bin/cputypes.d
Symbolic link
1
Bin/cputypes.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Cpu/cputypes.d
|
1
Bin/cpuwalk.d
Symbolic link
1
Bin/cpuwalk.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Cpu/cpuwalk.d
|
1
Bin/crash.d
Symbolic link
1
Bin/crash.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/crash.d
|
1
Bin/creatbyproc.d
Symbolic link
1
Bin/creatbyproc.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/creatbyproc.d
|
1
Bin/cswstat.d
Symbolic link
1
Bin/cswstat.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Kernel/cswstat.d
|
1
Bin/dappprof
Symbolic link
1
Bin/dappprof
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/dappprof
|
1
Bin/dapptrace
Symbolic link
1
Bin/dapptrace
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/dapptrace
|
1
Bin/dexplorer
Symbolic link
1
Bin/dexplorer
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../dexplorer
|
1
Bin/diskhits
Symbolic link
1
Bin/diskhits
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Disk/diskhits
|
1
Bin/dispqlen.d
Symbolic link
1
Bin/dispqlen.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Cpu/dispqlen.d
|
1
Bin/dnlcps.d
Symbolic link
1
Bin/dnlcps.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Kernel/dnlcps.d
|
1
Bin/dnlcsnoop.d
Symbolic link
1
Bin/dnlcsnoop.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Kernel/dnlcsnoop.d
|
1
Bin/dnlcstat
Symbolic link
1
Bin/dnlcstat
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Kernel/dnlcstat
|
1
Bin/dtruss
Symbolic link
1
Bin/dtruss
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../dtruss
|
1
Bin/dvmstat
Symbolic link
1
Bin/dvmstat
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../dvmstat
|
1
Bin/errinfo
Symbolic link
1
Bin/errinfo
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../errinfo
|
1
Bin/execsnoop
Symbolic link
1
Bin/execsnoop
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../execsnoop
|
1
Bin/fddist
Symbolic link
1
Bin/fddist
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/fddist
|
1
Bin/filebyproc.d
Symbolic link
1
Bin/filebyproc.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/filebyproc.d
|
1
Bin/fspaging.d
Symbolic link
1
Bin/fspaging.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../FS/fspaging.d
|
1
Bin/fsrw.d
Symbolic link
1
Bin/fsrw.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../FS/fsrw.d
|
1
Bin/guess.d
Symbolic link
1
Bin/guess.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Misc/guess.d
|
1
Bin/hotkernel
Symbolic link
1
Bin/hotkernel
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../hotkernel
|
1
Bin/hotspot.d
Symbolic link
1
Bin/hotspot.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Disk/hotspot.d
|
1
Bin/hotuser
Symbolic link
1
Bin/hotuser
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../hotuser
|
1
Bin/httpdstat.d
Symbolic link
1
Bin/httpdstat.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Apps/httpdstat.d
|
1
Bin/icmpstat.d
Symbolic link
1
Bin/icmpstat.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Net/icmpstat.d
|
1
Bin/intbycpu.d
Symbolic link
1
Bin/intbycpu.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Cpu/intbycpu.d
|
1
Bin/intoncpu.d
Symbolic link
1
Bin/intoncpu.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Cpu/intoncpu.d
|
1
Bin/inttimes.d
Symbolic link
1
Bin/inttimes.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Cpu/inttimes.d
|
1
Bin/iofile.d
Symbolic link
1
Bin/iofile.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Disk/iofile.d
|
1
Bin/iofileb.d
Symbolic link
1
Bin/iofileb.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Disk/iofileb.d
|
1
Bin/iopattern
Symbolic link
1
Bin/iopattern
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../iopattern
|
1
Bin/iopending
Symbolic link
1
Bin/iopending
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Disk/iopending
|
1
Bin/iosnoop
Symbolic link
1
Bin/iosnoop
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../iosnoop
|
1
Bin/j_calldist.d
Symbolic link
1
Bin/j_calldist.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_calldist.d
|
1
Bin/j_calls.d
Symbolic link
1
Bin/j_calls.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_calls.d
|
1
Bin/j_calltime.d
Symbolic link
1
Bin/j_calltime.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_calltime.d
|
1
Bin/j_classflow.d
Symbolic link
1
Bin/j_classflow.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_classflow.d
|
1
Bin/j_cpudist.d
Symbolic link
1
Bin/j_cpudist.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_cpudist.d
|
1
Bin/j_cputime.d
Symbolic link
1
Bin/j_cputime.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_cputime.d
|
1
Bin/j_events.d
Symbolic link
1
Bin/j_events.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_events.d
|
1
Bin/j_flow.d
Symbolic link
1
Bin/j_flow.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_flow.d
|
1
Bin/j_flowtime.d
Symbolic link
1
Bin/j_flowtime.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_flowtime.d
|
1
Bin/j_methodcalls.d
Symbolic link
1
Bin/j_methodcalls.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_methodcalls.d
|
1
Bin/j_objnew.d
Symbolic link
1
Bin/j_objnew.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_objnew.d
|
1
Bin/j_package.d
Symbolic link
1
Bin/j_package.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_package.d
|
1
Bin/j_profile.d
Symbolic link
1
Bin/j_profile.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_profile.d
|
1
Bin/j_stat.d
Symbolic link
1
Bin/j_stat.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_stat.d
|
1
Bin/j_syscalls.d
Symbolic link
1
Bin/j_syscalls.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_syscalls.d
|
1
Bin/j_syscolors.d
Symbolic link
1
Bin/j_syscolors.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_syscolors.d
|
1
Bin/j_thread.d
Symbolic link
1
Bin/j_thread.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_thread.d
|
1
Bin/j_who.d
Symbolic link
1
Bin/j_who.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Java/j_who.d
|
1
Bin/js_calldist.d
Symbolic link
1
Bin/js_calldist.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_calldist.d
|
1
Bin/js_calls.d
Symbolic link
1
Bin/js_calls.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_calls.d
|
1
Bin/js_calltime.d
Symbolic link
1
Bin/js_calltime.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_calltime.d
|
1
Bin/js_cpudist.d
Symbolic link
1
Bin/js_cpudist.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_cpudist.d
|
1
Bin/js_cputime.d
Symbolic link
1
Bin/js_cputime.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_cputime.d
|
1
Bin/js_execs.d
Symbolic link
1
Bin/js_execs.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_execs.d
|
1
Bin/js_flow.d
Symbolic link
1
Bin/js_flow.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_flow.d
|
1
Bin/js_flowinfo.d
Symbolic link
1
Bin/js_flowinfo.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_flowinfo.d
|
1
Bin/js_flowtime.d
Symbolic link
1
Bin/js_flowtime.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_flowtime.d
|
1
Bin/js_objcpu.d
Symbolic link
1
Bin/js_objcpu.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_objcpu.d
|
1
Bin/js_objgc.d
Symbolic link
1
Bin/js_objgc.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_objgc.d
|
1
Bin/js_objnew.d
Symbolic link
1
Bin/js_objnew.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_objnew.d
|
1
Bin/js_stat.d
Symbolic link
1
Bin/js_stat.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_stat.d
|
1
Bin/js_who.d
Symbolic link
1
Bin/js_who.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../JavaScript/js_who.d
|
1
Bin/kill.d
Symbolic link
1
Bin/kill.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/kill.d
|
1
Bin/kstat_types.d
Symbolic link
1
Bin/kstat_types.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Kernel/kstat_types.d
|
1
Bin/lastwords
Symbolic link
1
Bin/lastwords
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/lastwords
|
1
Bin/loads.d
Symbolic link
1
Bin/loads.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Cpu/loads.d
|
1
Bin/lockbydist.d
Symbolic link
1
Bin/lockbydist.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Locks/lockbydist.d
|
1
Bin/lockbyproc.d
Symbolic link
1
Bin/lockbyproc.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Locks/lockbyproc.d
|
1
Bin/minfbypid.d
Symbolic link
1
Bin/minfbypid.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Mem/minfbypid.d
|
1
Bin/minfbyproc.d
Symbolic link
1
Bin/minfbyproc.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Mem/minfbyproc.d
|
1
Bin/mmapfiles.d
Symbolic link
1
Bin/mmapfiles.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/mmapfiles.d
|
1
Bin/modcalls.d
Symbolic link
1
Bin/modcalls.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Kernel/modcalls.d
|
1
Bin/newproc.d
Symbolic link
1
Bin/newproc.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/newproc.d
|
1
Bin/nfswizard.d
Symbolic link
1
Bin/nfswizard.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Apps/nfswizard.d
|
1
Bin/opensnoop
Symbolic link
1
Bin/opensnoop
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../opensnoop
|
1
Bin/pathopens.d
Symbolic link
1
Bin/pathopens.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/pathopens.d
|
1
Bin/pfilestat
Symbolic link
1
Bin/pfilestat
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Proc/pfilestat
|
1
Bin/pgpginbypid.d
Symbolic link
1
Bin/pgpginbypid.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Mem/pgpginbypid.d
|
1
Bin/pgpginbyproc.d
Symbolic link
1
Bin/pgpginbyproc.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Mem/pgpginbyproc.d
|
1
Bin/php_calldist.d
Symbolic link
1
Bin/php_calldist.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Php/php_calldist.d
|
1
Bin/php_calltime.d
Symbolic link
1
Bin/php_calltime.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Php/php_calltime.d
|
1
Bin/php_cpudist.d
Symbolic link
1
Bin/php_cpudist.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Php/php_cpudist.d
|
1
Bin/php_cputime.d
Symbolic link
1
Bin/php_cputime.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Php/php_cputime.d
|
1
Bin/php_flow.d
Symbolic link
1
Bin/php_flow.d
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../Php/php_flow.d
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user