|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /usr/share/doc/systemtap-client-1.8/examples/process/ |
Upload File : |
#!/usr/bin/stap
# plimit.stp
# Copyright (C) 2006 Red Hat, Inc., Eugene Teo <eteo@redhat.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
%{
#include <linux/sched.h>
#include <linux/list.h>
%}
function getrlimit:string (rlim:long, pid:long) %{ /* pure */
struct task_struct *p;
struct list_head *_p, *_n;
static char cur_buf[24], max_buf[24];
long int cur, max;
list_for_each_safe(_p, _n, ¤t->tasks) {
p = list_entry(_p, struct task_struct, tasks);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)
cur = p->signal->rlim[STAP_ARG_rlim].rlim_cur;
max = p->signal->rlim[STAP_ARG_rlim].rlim_max;
#else
cur = p->rlim[STAP_ARG_rlim].rlim_cur;
max = p->rlim[STAP_ARG_rlim].rlim_max;
#endif
if (p->pid == (int)STAP_ARG_pid) {
if (cur == -1 && max == -1)
strcat(STAP_RETVALUE, "unlimited unlimited");
else if (cur == -1)
snprintf(STAP_RETVALUE, MAXSTRINGLEN, "%-9s %-9ld",
"unlimited", max);
else if (max == -1)
snprintf(STAP_RETVALUE, MAXSTRINGLEN, "%-9ld %-9s",
cur, "unlimited");
else
snprintf(STAP_RETVALUE, MAXSTRINGLEN, "%-9ld %-9ld",
cur, max);
}
}
%}
function task_execname_by_pid:string (pid:long) %{ /* pure */
struct task_struct *p;
struct list_head *_p, *_n;
list_for_each_safe(_p, _n, ¤t->tasks) {
p = list_entry(_p, struct task_struct, tasks);
if (p->pid == (int)STAP_ARG_pid)
snprintf(STAP_RETVALUE, MAXSTRINGLEN, "%s", p->comm);
}
%}
probe begin
{
printf("%d: -%s\n", $1, task_execname_by_pid($1))
/* include/asm-generic/resource.h */
printf(" resource current maximum\n")
printf("coredump(blocks) %s\n", getrlimit(4, $1))
printf("data(bytes) %s\n", getrlimit(2, $1))
printf("max nice %s\n", getrlimit(13, $1))
printf("file size(blocks) %s\n", getrlimit(1, $1))
printf("pending signals %s\n", getrlimit(11, $1))
printf("max locked memory(bytes) %s\n", getrlimit(8, $1))
printf("max memory size(bytes) %s\n", getrlimit(5, $1))
printf("open files %s\n", getrlimit(7, $1))
printf("POSIX message queues(bytes) %s\n", getrlimit(12, $1))
printf("max rt priority %s\n", getrlimit(14, $1))
printf("stack size(bytes) %s\n", getrlimit(3, $1))
printf("cpu time(seconds) %s\n", getrlimit(0, $1))
printf("max user processes %s\n", getrlimit(6, $1))
printf("virtual memory(bytes) %s\n", getrlimit(9, $1))
printf("file locks %s\n", getrlimit(10, $1))
exit()
}