c29d517558
unmodified. For others we'll need to add the missing probes and adjust. This is not attached to the build.
106 lines
2.4 KiB
Bash
Executable File
106 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/ksh
|
|
#
|
|
# sampleproc - sample processes on the CPUs.
|
|
# Written using DTrace (Solaris 10 3/05).
|
|
#
|
|
# This program samples which process is on each CPU, at a particular
|
|
# configurable rate. This can be used as an estimate for which process
|
|
# is consuming the most CPU time.
|
|
#
|
|
# $Id: sampleproc,v 1.1.1.1 2015/09/30 22:01:09 christos Exp $
|
|
#
|
|
# USAGE: sampleproc [hertz] # hit Ctrl-C to end sample
|
|
#
|
|
# FIELDS:
|
|
# PID Process ID
|
|
# COMMAND Command name
|
|
# COUNT Number of samples
|
|
# PERCENT Percent of CPU usage
|
|
#
|
|
# BASED ON: /usr/demo/dtrace/prof.d
|
|
#
|
|
# SEE ALSO:
|
|
# DTrace Guide "profile Provider" chapter (docs.sun.com)
|
|
#
|
|
# PORTIONS: 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
|
|
#
|
|
# 09-Jun-2005 Brendan Gregg Created this.
|
|
# 09-Jul-2005 " " Last update.
|
|
|
|
### Usage
|
|
function usage
|
|
{
|
|
cat <<-END >&2
|
|
USAGE: sampleproc [hertz]
|
|
eg,
|
|
sampleproc # defaults to 100 hertz
|
|
sampleproc 1000 # 1000 hertz
|
|
END
|
|
exit 1
|
|
}
|
|
|
|
### Process arguments
|
|
if (( $# == 0 )); then
|
|
hertz=100
|
|
elif (( $# == 1 )); then
|
|
hertz=$1
|
|
if [[ "$hertz" = *[a-zA-Z]* ]]; then
|
|
print "ERROR2: $hertz hertz is invalid." >&2
|
|
exit 2
|
|
fi
|
|
if (( hertz > 5000 )); then
|
|
print "ERROR3: $hertz hertz is too fast (max 5000)." >&2
|
|
exit 3
|
|
fi
|
|
if (( hertz < 1 )); then
|
|
print "ERROR4: $hertz hertz is too low (min 1)." >&2
|
|
exit 4
|
|
fi
|
|
else
|
|
usage
|
|
fi
|
|
|
|
### Run DTrace
|
|
/usr/sbin/dtrace -n '
|
|
#pragma D option quiet
|
|
|
|
dtrace:::BEGIN
|
|
{
|
|
printf("Sampling at %d hertz... Hit Ctrl-C to end.\n",$1);
|
|
self->start = timestamp;
|
|
}
|
|
|
|
profile:::profile-$1
|
|
{
|
|
@Proc[pid, execname] = count();
|
|
@BigProc[pid, execname] = sum(1000); /* dont ask */
|
|
}
|
|
|
|
dtrace:::END
|
|
{
|
|
this->end = timestamp;
|
|
|
|
printf("%5s %-20s %10s\n", "PID", "CMD", "COUNT");
|
|
printa("%5d %-20s %10@d\n", @Proc);
|
|
|
|
normalize(@BigProc,
|
|
((`ncpus_online * $1 * (this->end - self->start))/100000000));
|
|
printf("\n%5s %-20s %10s\n", "PID", "CMD", "PERCENT");
|
|
printa("%5d %-20s %10@d\n", @BigProc);
|
|
}
|
|
' $hertz
|