Ottimizzazione thread conntrack

This commit is contained in:
cmaffio
2016-04-22 17:10:13 +02:00
parent 209cbda2ba
commit 1980b0707a

View File

@@ -24,6 +24,12 @@ my $dbmysql = DBI->connect("DBI:mysql:;host=$DBhost", $DBuser, $DBpass) or die (
$sts = $dbmysql->prepare("use $DBname"); $sts = $dbmysql->prepare("use $DBname");
$sts->execute (); $sts->execute ();
$query = "SELECT valore FROM conf WHERE variabile = 'lthread'";
$sts = $dbmysql->prepare($query);
$sts->execute ();
$ref = $sts->fetchrow_hashref;
our $limit_thread = $$ref{'valore'};
$query = "SELECT ip FROM proxy_pool GROUP BY ip"; $query = "SELECT ip FROM proxy_pool GROUP BY ip";
$sts = $dbmysql->prepare($query); $sts = $dbmysql->prepare($query);
$sts->execute (); $sts->execute ();
@@ -66,10 +72,13 @@ while ( $ref = $sts->fetchrow_hashref ) {
while (1) { while (1) {
sleep 30; sleep 30;
while (my ($variabile, $puntatore) = each %proc) {
foreach my $variabile (keys %proc) {
$puntatore = $proc{$variabile};
if(!$puntatore or !$puntatore->is_running ) { if(!$puntatore or !$puntatore->is_running ) {
print "Rilevato termine processo $variabile\n" if ($verbose); print "Rilevato termine processo $variabile\n" if ($verbose);
#$puntatore->detach(); delete $proc{$variabile};
#$puntatore->join();
if ($variabile eq "database") { if ($variabile eq "database") {
$proc{'database'} = threads->create(\&database); $proc{'database'} = threads->create(\&database);
@@ -81,7 +90,7 @@ while (1) {
my $id = $$ref{'id'}; my $id = $$ref{'id'};
my $ip = $$ref{'ip'}; my $ip = $$ref{'ip'};
my $port = $$ref{'port'}; my $port = $$ref{'port'};
$proc{$$variabile} = threads->create(\&conntrack, $id, $ip, $port); $proc{$variabile} = threads->create(\&conntrack, $id, $ip, $port);
} }
} }
} }
@@ -93,6 +102,8 @@ sub conntrack {
my $proxy_IP = shift; my $proxy_IP = shift;
my $proxy_PORT = shift; my $proxy_PORT = shift;
my $conta = 0;
print "Attivato agente $sess_id su $proxy_IP:$proxy_PORT\n" if ($verbose); print "Attivato agente $sess_id su $proxy_IP:$proxy_PORT\n" if ($verbose);
open CT, "/usr/sbin/conntrack -E -eNEW,DESTROY -otimestamp,id -p tcp -d $proxy_IP --dport $proxy_PORT |" or die "non va\n"; open CT, "/usr/sbin/conntrack -E -eNEW,DESTROY -otimestamp,id -p tcp -d $proxy_IP --dport $proxy_PORT |" or die "non va\n";
@@ -136,8 +147,9 @@ sub conntrack {
my $remote_SEND = $5; my $remote_SEND = $5;
my $remote_RECEIVE = $6; my $remote_RECEIVE = $6;
my $thread_ID = $7; my $thread_ID = $7;
printf ("$sess_id - IP: %-15s - ID: %-12s - Inviati: %10d - Ricevuti: %10d\n", $remote_IP, $thread_ID, $remote_SEND, $remote_RECEIVE) if ($verbose); $conta++;
printf ("$conta/$limit_thread - $sess_id - IP: %-15s - ID: %-12s - Inviati: %10d - Ricevuti: %10d\n", $remote_IP, $thread_ID, $remote_SEND, $remote_RECEIVE) if ($verbose);
my $query = " UPDATE my $query = " UPDATE
proxy_dati proxy_dati
@@ -161,6 +173,7 @@ sub conntrack {
$sem2->up(); $sem2->up();
print "Invio query UPDATE\n" if ($verbose > 1); print "Invio query UPDATE\n" if ($verbose > 1);
} }
return if ($conta >= $limit_thread);
} }
close CT; close CT;
} }
@@ -185,7 +198,6 @@ sub database {
$sts->finish; $sts->finish;
$sem1->up(); $sem1->up();
} }
} }
sub DBConn { sub DBConn {