in reply to Re: Is 100% CPU utilisation during a procees is aproblem?
in thread Is 100% CPU utilisation during a procees is aproblem?
Hi All, thanks for reply. Below is the first part of my code where script is creating a sqlite database, manipulating the data of 3gb file and then storing it into the database..as I start running script CPU usage reaches 99-100%.. so this part has the problem..
#!/usr/bin/perl use Data::Dumper; use DBI; use File::Basename; #use warnings; open(FH,"<",$ARGV[0]); open(AH,"<",$ARGV[1]); open(OUT,">",$ARGV[2]); open(LOG,">",$ARGV[3]); ###################################################################### +################################################# #Conneting to database my $dbExt = "db"; my $driver = "SQLite"; my $file = basename($ARGV[1]); my @fileName = split(/\./, $file); $file = $fileName[0].".$dbExt"; my $dbFileName = dirname($ARGV[1])."/". $file; if(-e $dbFileName) { unlink ($dbFileName); } my $database = "$dbFileName"; my $dsn = "DBI:$driver:dbname=$database"; my $userid = ""; my $password = ""; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1, Au +toCommit => 0 }) or die $DBI::errstr; my $stmt = qq(CREATE TABLE ACCU_USAGE (MOBILE VARCHAR2(50), PLANNAME +VARCHAR2(50), PLANUSAGE CHAR(50), COUNTER CHAR(20), STATUS VARCHAR2(2 +0), EXPIRY_DATE CHAR( 20), PREEXP_TIME CHAR(20), PREEXP_VOLUME CHAR(20)); ); my $rv = $dbh->do($stmt); if($rv < 0){ unlink($dbFileName) if(-e $dbFileName); $dbh->disconnect(); print LOG $DBI::errstr; exit(1); } ###################################################################### +################################################# my $SubsSize= -s $ARGV[0]; my $AccuSize= -s $ARGV[1]; my $SubsCount=0; my $AccuCount=0; my $finalCount=0; #my $AccUsg; my $rowCount = 0; while(<AH>) { chomp; my $line=$_; $AccuCount++; my $MobileNumber; if( $line =~ /subscriberId:(\w+)\(\"(\d+)\"\)/ ) { $MobileNumber=$2; } else { $MobileNumber="''"; } my $plan=$line; $plan =~s/\\//g; my @AccVolume; if ( $plan =~ /usageControlAccum:(\w+)\(\"(.*)\"\)/ ) { my $p=$2; $p=~s/:\{/ => {/g; $p=~s/:\[/ => [/g; $p=~s/\"/\'/g; $p=~s/\':/\'=>/g; $p=~s/\}n/\}/g; #print $p,"\n"; my $e=eval($p); if ( @$ ) { push (@AccVolume,"error"); } else { #print Dumper($e); foreach my $value ( @{$e->{'reportingGroups'}} ) { if ( exists ( $value->{'absoluteAccumulated'}->{'counters' +} ) ) { $stmt = qq(INSERT INTO ACCU_USAGE VALUES ($MobileNumb +er, \'$value->{'subscriberGroupName'}\', $value->{'absoluteAccumulate +d'}->{'counters'}->[0]- >{'bidirVolume'}, \'$value->{'absoluteAccumulated'}->{'counters'}->[0] +->{'name'}\', \'$value->{'selected'}\', \'$value->{'absoluteAccumulat +ed'}->{'expiryDate'}->{ 'volume'}\', \'$value->{'absoluteAccumulated'}->{'previousExpiryDate'} +->{'time'}\', \'$value->{'absoluteAccumulated'}->{'previousExpiryDate +'}->{'volume'}\' );); } elsif ( exists ( $value->{'absoluteAccumulated'}->{'bidirV +olume'} ) ) { $stmt = qq(INSERT INTO ACCU_USAGE VALUES ($MobileNumb +er, \'$value->{'subscriberGroupName'}\', $value->{'absoluteAccumulate +d'}->{'bidirVolume'}, \ '$value->{'absoluteAccumulated'}->{'name'}\', \'$value->{'selected'}\' +, \'$value->{'absoluteAccumulated'}->{'expiryDate'}->{'volume'}\', \' +$value->{'absoluteAccum ulated'}->{'previousExpiryDate'}->{'time'}\', \'$value->{'absoluteAccu +mulated'}->{'previousExpiryDate'}->{'volume'}\' );); } ###################################################################### +############################################################ $rv = $dbh->do($stmt) or die $DBI::errstr; if($rv < 0) { print LOG "Failed to insert $stmt query. Exiting...\n" +; unlink($dbFileName) if(-e $dbFileName); print LOG $DBI::errstr; $dbh->disconnect(); exit(1); } else { $rowCount++; if($rowCount == 5000) { $dbh->commit(); $rowCount = 0; } } ###################################################################### +############################################################# } } } } close(AH); ###################################################################### +######################################3 $dbh->commit();
here AH is my 3 gb file.. script manipulates it line by line and forms a hash which stores the values to be filled into the database...<\p>
|
|---|