mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-16 09:06:25 +00:00
51 lines
1.3 KiB
Text
Executable file
51 lines
1.3 KiB
Text
Executable file
#!/usr/bin/stap
|
|
/*
|
|
* Copyright (c) 2011, 2012 Oracle and/or its affiliates. All rights reserved.
|
|
*
|
|
* apicalls - Summarize DB API call count grouped by thread.
|
|
*
|
|
* This summarizes the count of DB apicalls grouped by thread or process.
|
|
*
|
|
* The path to the DB library is required to be the first argument.
|
|
*
|
|
* To limit tracing to a particular process use one of the stap options:
|
|
* -x <pid> or
|
|
* -c "<program> [<program arguments>..]"
|
|
*
|
|
*/
|
|
|
|
global calls
|
|
|
|
probe begin
|
|
{
|
|
printf("DB API call counts of ");
|
|
if (target() == 0)
|
|
printf("processes using \"%s\"", @1)
|
|
else
|
|
printf("process %d", target());
|
|
printf("; interrupt to display summary\n")
|
|
}
|
|
|
|
probe process(@1).function("db_*create").call,
|
|
process(@1).function("__*pp").call
|
|
{
|
|
calls[(target() == 0 ? pid() : tid()), probefunc()] <<< 1;
|
|
}
|
|
|
|
probe end
|
|
{
|
|
any_seen = 0;
|
|
/* Display counts grouped by process, or by thread. */
|
|
if (target() == 0)
|
|
printf("%-20s %7s %9s\n",
|
|
"Function", "process", "callcount")
|
|
else
|
|
printf("%-20s %7s %9s for process %d\n",
|
|
"Function", "thread", "callcount", target());
|
|
foreach ([a,b] in calls+) {
|
|
printf("%-20s %7d %9d\n", b, a, @count(calls[a,b]));
|
|
any_seen = 1;
|
|
}
|
|
if (!any_seen)
|
|
printf("No probes were triggered in %s; it might not be the correct library\n", @1);
|
|
}
|