Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa
Archives de la liste
- From: Aumont - Comite Reseaux des Universites <adresse@cachée>
- To: adresse@cachée
- Subject: quelques modifs dans sympa.0004
- Date: Thu, 21 Aug 1997 13:03:17 +0200
-1- Sympa utilise $max_smtp pour controler le nombre max de sendmail qu'il
lance en //, cette variable est initialisée à 30 ce qui peut être beaucoup
trop peu pour une machine dédiée, en effet le nombre de smtp lancé en //
peut devenir le goulot d'étranglement sur une machine qui reste inoccupée
tant en cpu qu'en memoire. J'ai passé cette variable dans le
sympa.conf. (modif dans sympa.pl et smtp.pl).
-2- Gestion priorité et kill -TERM . Le corps de sympa est fait ainsi :
jqa reception d'un signal TERM
readdir(spool)
trier les fichiers a traiter par priorité
pour chaque fichier a traiter
traiter le fichier
.
sleep 10
.
Cette structure a deux conséquences sur un site chargé :
la boucle sur chaque fichier a traiter dans le spool peut être longue
à dérouler (2 3 heures). Dans ce cas, seul un kill -9 permet de prendre
la main, le kill -TERM étant bien trop long a attendre. De plus, le
méccanisme de priorité fort utile devient a moitié inopérant : les
messages prioritaire recu après le readdir passerons après les messages
de faible priorité préexistant dans le spool.
Solution proposée simple et radicale : ne traiter que le message le
plus prioritaire de tout les messages présent dans le spool, puis
refaire le READDIR et le test sur la reception d'un signal TERM.
Ci dessous les diff sur sympa.pl et smtp.pl
ps : ou est passé en beta 5 ?
--------------------------------------------------------------------------
# diff -c sympa.pl sympa.pl.orig
*** sympa.pl Thu Aug 21 11:48:42 1997
--- sympa.pl.orig Thu Aug 21 11:17:04 1997
***************
*** 28,34 ****
nrcpt nrcpt
avg avgrcpt
sendmail sendmail
maxsmtp max_smtp
host hostname
email myname
pidfile pidfile
--- 28,33 ----
***************
*** 146,152 ****
print STDERR "Sympa started.\n" if ($opt_d);
&log('notice', 'Sympa Started');
&log('notice', 'maxsmtp %s',$max_smtp);
## Put ourselves in background if we're not in debug mode.
unless ($opt_d) {
--- 145,150 ----
***************
*** 184,199 ****
rename("$qdir/$i", "$qdir/BAD-$i");
&log('notice', "Renaming bad file %s to BAD-%s", $i, $i);
}
last;
}
! sleep(1);
&smtp::reaper;
}
&log('notice', 'Sympa exited normally due to signal');
exit(0);
sub sigterm {
&log('notice', 'TERM signal received');
$end = 1;
}
--- 182,195 ----
rename("$qdir/$i", "$qdir/BAD-$i");
&log('notice', "Renaming bad file %s to BAD-%s", $i, $i);
}
}
! sleep(10);
&smtp::reaper;
}
&log('notice', 'Sympa exited normally due to signal');
exit(0);
sub sigterm {
$end = 1;
}
#
--------------------------------------------------------------------------
# diff -c smtp.pl smtp.pl.orig
*** smtp.pl Thu Aug 21 13:01:29 1997
--- smtp.pl.orig Thu Aug 21 13:00:50 1997
***************
*** 11,16 ****
--- 11,17 ----
my $id = '@(#)$Id: smtp.pl,v 1.2 1997/05/31 12:29:33 sympa Exp $';
$opensmtp = 0;
+ $max_smtp = 30; ## No more than 10 simultaneous SMTP sessions
$fh = 'fh0000000000'; ## File handle for the stream.
$max_arg = 4096;
***************
*** 54,61 ****
## Check how many open smtp's we have, if too many wait for a few
## to terminate and then do our job.
print STDERR "Open = $opensmtp\n";
! while ($opensmtp > $main::max_smtp) {
! print STDERR "Too many open SMTP, Open = $opensmtp (limit
$main::max_smtp)\n";
last if (($pid = wait) == -1); ## No more childs, don't block.
if (!defined($pid{$pid})) {
print STDERR "Waited $pid, unknown process to me\n";
--- 55,62 ----
## Check how many open smtp's we have, if too many wait for a few
## to terminate and then do our job.
print STDERR "Open = $opensmtp\n";
! while ($opensmtp > $max_smtp) {
! print STDERR "Too many open SMTP, Open = $opensmtp\n";
last if (($pid = wait) == -1); ## No more childs, don't block.
if (!defined($pid{$pid})) {
print STDERR "Waited $pid, unknown process to me\n";
***************
*** 94,100 ****
}
close(IN);
$opensmtp++;
! select(undef, undef,undef, 0.3) if ($opensmtp < $main::max_smtp);
return("smtp::$fh"); ## Symbol for the write descriptor.
}
--- 95,101 ----
}
close(IN);
$opensmtp++;
! select(undef, undef,undef, 0.3) if ($opensmtp < $max_smtp);
return("smtp::$fh"); ## Symbol for the write descriptor.
}
---------------------------------------------------------------------------
Serge Aumont CRU campus Beaulieu Tel : 02 99 84 71 47
35042 Rennes Cedex fax : 02 99 84 71 67
-
quelques modifs dans sympa.0004,
Aumont - Comite Reseaux des Universites, 21/08/1997
-
Re: quelques modifs dans sympa.0004,
Christophe Wolfhugel, 21/08/1997
- Re: quelques modifs dans sympa.0004, Aumont - Comite Reseaux des Universites, 21/08/1997
-
Re: quelques modifs dans sympa.0004,
Christophe Wolfhugel, 21/08/1997
Archives gérées par MHonArc 2.6.19+.