3 # ------------------------------------------------
\r
4 # Copyright 2014 AT&T Intellectual Property
\r
5 # Licensed under the Apache License, Version 2.0 (the "License");
\r
6 # you may not use this file except in compliance with the License.
\r
7 # You may obtain a copy of the License at
\r
9 # http://www.apache.org/licenses/LICENSE-2.0
\r
11 # Unless required by applicable law or agreed to in writing, software
\r
12 # distributed under the License is distributed on an "AS IS" BASIS,
\r
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
14 # See the License for the specific language governing permissions and
\r
15 # limitations under the License.
\r
16 # -------------------------------------------
\r
22 if(scalar(@ARGV)>0){
\r
23 if(int($ARGV[0])>0){
\r
24 $interval = int($ARGV[0]);
\r
26 if($ARGV[0] eq '-'){
\r
29 print STDERR "Argument 1 ($ARGV[0]) ignored.\n";
\r
33 if(scalar(@ARGV)>1){
\r
34 if(int($ARGV[1])>0){
\r
35 $interval = int($ARGV[1]);
\r
37 if($ARGV[1] eq '-'){
\r
40 print STDERR "Argument 2 ($ARGV[1]) ignored.\n";
\r
44 if(scalar(@ARGV)>2){
\r
45 print STDERR "Only 2 arguments accepted, additional args ignored.\n";
\r
48 open O, ">resource_log.csv" or die "Can't open resource_log.csv\n";
\r
53 open I,"getconf PAGESIZE |";
\r
56 $pagesize = int($line);
\r
60 $effective_uid = $REAL_USER_ID;
\r
61 $ps_cmd = "ps -U $effective_uid |";
\r
69 @flds = split /\s+/,$line;
\r
70 if($flds[3] =~ /rts/){
\r
71 push @rts_pids,int($flds[0]);
\r
73 if($flds[3] =~ /hfta_(\d+)/){
\r
74 $hfta_pid{$1} = int($flds[0]);
\r
78 $rts_pids = sort {$a<=>$b} @rts_pids;
\r
81 print O "START monitoring at time $now\n";
\r
82 print O "ts,proc,pid,utime,stime,vm_size,rss,pagesize\n";
\r
84 print "START monitoring at time $now\n";
\r
85 print "ts,proc,pid,utime,stime,vm_size,rss,pagesize\n";
\r
87 #print "RTS PIDs:\n";
\r
88 #foreach $p (@rts_pids){
\r
91 #print "\nHFTA PIDs:\n";
\r
92 # foreach $h (sort {$a<=>$b} keys(%hfta_pid)){
\r
93 # print "($h,",$hfta_pid{$h},") ";
\r
99 foreach $p (@rts_pids){
\r
100 get_proc_stats($p);
\r
101 print O "$now,rts,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";
\r
103 print "$now,rts,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";
\r
106 foreach $h (sort {$a<=>$b} keys(%hfta_pid)){
\r
108 get_proc_stats($p);
\r
109 print O "$now,hfta_$h,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";
\r
111 print "$now,hfta_$h,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";
\r
120 sub get_proc_stats{
\r
127 open I_PROC_STATS,"/proc/$pid/stat";
\r
129 $line=<I_PROC_STATS>;
\r
130 close I_PROC_STATS;
\r
132 #print "getstats($pid): $line\n";
\r
135 @flds = split / +/,$line;
\r
138 $pid = $flds[$pos]; $pos++;
\r
139 $fname = $flds[$pos]; $pos++;
\r
140 $state = $flds[$pos]; $pos++;
\r
141 $pppid = $flds[$pos]; $pos++;
\r
142 $pgrp = $flds[$pos]; $pos++;
\r
143 $session = $flds[$pos]; $pos++;
\r
144 $tty_n = $flds[$pos]; $pos++;
\r
145 $tpgid = $flds[$pos]; $pos++;
\r
146 $flags = $flds[$pos]; $pos++;
\r
147 $minor_faults = $flds[$pos]; $pos++;
\r
148 $child_minor_faults = $flds[$pos]; $pos++;
\r
149 $major_faults = $flds[$pos0]; $pos++;
\r
150 $child_major_faults = $flds[$pos0]; $pos++;
\r
151 $user_time = $flds[$pos]; $pos++;
\r
152 $sys_time = $flds[$pos]; $pos++;
\r
153 $child_user_time = $flds[$pos]; $pos++;
\r
154 $child_sys_time = $flds[$pos]; $pos++;
\r
155 $priority = $flds[$pos]; $pos++;
\r
156 $nice = $flds[$pos]; $pos++;
\r
157 $num_threads = $flds[$pos]; $pos++;
\r
158 $interval_timer_realvalue = $flds[$pos]; $pos++;
\r
159 $start_time = $flds[$pos]; $pos++;
\r
160 $vm_size = $flds[$pos]; $pos++;
\r
161 $resident_set_size = $flds[$pos]; $pos++;
\r
162 $rss_limit = $flds[$pos]; $pos++;
\r
163 $startcode = $flds[$pos]; $pos++;
\r
164 $endcode = $flds[$pos]; $pos++;
\r
165 $startstack = $flds[$pos]; $pos++;
\r
166 $curr_kernel_stack_ptr = $flds[$pos]; $pos++;
\r
167 $curr_instruction_ptr = $flds[$pos]; $pos++;
\r
168 $signal = $flds[$pos]; $pos++;
\r
169 $sigblocked = $flds[$pos]; $pos++;
\r
170 $sigignore = $flds[$pos]; $pos++;
\r
171 $wchan = $flds[$pos]; $pos++;
\r
172 $nswap = $flds[$pos]; $pos++;
\r
173 $exit_signal = $flds[$pos]; $pos++;
\r
174 $processor = $flds[$pos]; $pos++;
\r
175 $rt_priority = $flds[$pos]; $pos++;
\r
176 $policy = $flds[$pos]; $pos++;
\r
177 $aggr_block_io_delays = $flds[$pos]; $pos++;
\r
178 $guest_time = $flds[$pos]; $pos++;
\r
179 $cguest_time = $flds[$pos]; $pos++;
\r