Andreas Leppert schrieb:
>was kann ich tun?

Mehr Speicher installieren??  :^)

Es scheint mir dass 256MB ist zu wenig, wegen den Riesen-cache-file, 
obwohl Sie dreimal so viel swap haben.  Und wenn die httpd Prozessen auch 
noch drin passen muessen....

-- 
Michael S Hill <[EMAIL PROTECTED]>
IBM Global Services
(303)924-9001  T/L 263-9001
Boulder, CO






"Andreas Leppert" <[EMAIL PROTECTED]>
Sent by: [EMAIL PROTECTED]
05/10/04 02:15 PM
Please respond to analog-help

 
        To:     [EMAIL PROTECTED]
        cc: 
        Subject:        [analog-help] serverabsturz durch analog



hi analog list,

ich hab nen webserver, auf dem viele domains drauf sind, alles laeuft 
soweit ganz gut, nur eine seite macht probleme, die am meisten traffic auf 
dem server verursacht. bei den naechtlichen cronjobs wird u.a. auch ein 
script names 00updatestats aufgerufen, welches dann analog aufruft. 

hier meine analog.conf:
# Configuration file for analog 4.03
# Extra options used for generating the log data for OpCenterWeb
CACHEOUTFILE none
DNS NONE
#WARNINGS OFF
#APACHELOGFORMAT ("%h %l %u %t \"%r\" %>s %b \"%{User-Agent}i\"")
#LOGFORMAT (%S %l %j [%d/%M/%Y:%h:%n:%j] \"%j%w%r%wHTTP%j\" %c %b \"%B\")
LOGFORMAT COMBINED
LOGFILE none
OUTPUT COMPUTER
OUTFILE -
GENERAL ON
MONTHLY ON
MONTHCOLS RrPp
WEEKLY OFF
FULLDAILY OFF
DAILY ON
DAYCOLS RrPp
FULLHOURLY OFF
HOURLY ON
HOURCOLS RrPp
QUARTER OFF
FIVE OFF
HOST ON
HOSTCOLS RrPp
HOSTFLOOR 1:r
ORGANISATION ON
ORGCOLS RrPp
ORGFLOOR 1:r
DOMAIN ON
DOMCOLS RrPp
DOMSORTBY REQUESTS
DOMFLOOR 1:r
SUBDOMFLOOR 1:r
SUBDOMSORTBY REQUESTS
REQUEST OFF
DIRECTORY ON
DIRCOLS Rrb
FILETYPE ON
TYPECOLS Rrb
SIZE OFF
PROCTIME OFF
REDIR OFF
FAILURE ON
FAILCOLS Rr
REFERER OFF
REFSITE OFF
SEARCHQUERY OFF
SEARCHWORD OFF
REDIRREF OFF
FAILREF OFF
FULLBROWSER OFF
BROWSER ON
BROWFLOOR 1:r
BROWCOLS Rr
BROWSORTBY REQUESTS
SUBBROWSORTBY REQUESTS
SUBBROWFLOOR 1:r
OSREP OFF
VHOST OFF
USER OFF
FAILUSER OFF
STATUS OFF
HOSTLOWMEM 3


die seite verursacht so um die 30 GB traffic monatlich, denk mal ihr habt 
schon groessere seiten gehabt.  das script, welches analog aufruft, sieht 
so aus:

#!/usr/bin/perl -w
use integer;
my($oneday) = 86400;
my($oneweek) = 604800;

sub analyze {
#  print STDERR "$_[0]\n";
  if ($ENV{'OSTYPE'} =~ /^solaris/i) {
    system ("/usr/local/analog4.03/analog $_[0]");
  } else {
    system ("/usr/bin/analog $_[0]");
  }
}

#Process the command line arguments
if ($#ARGV != 1) {
  die "The number of arguments is wrong\nUsage updatestats statsdir 
logfile\n";
}

my($statdir,$logfile) = @ARGV;
my($analogconffile) = "$statdir/analog.cfg";
my($time) = time;
my($thisweekstat) = "$statdir/week".&getweeksbefore(0,$time);
my(@stattodelete) = (); #we sometimes do garbage collection
my($timeoption,$logoption);
my($weeklyoption) = "+g$analogconffile +C\"MONTHLY OFF\"";

my($cachefile) = "$statdir/cache";
my($runningoption) = "+g$analogconffile +C\"CACHEFILE $cachefile\"";

unless (stat ("$thisweekstat")) {
  # build the statistics for last week one more time
  my ($lastweekstat) = "$statdir/week".&getweeksbefore(1,$time);
  @stattodelete = ("$statdir/week".&getweeksbefore(4,$time),
                   "$statdir/week".&getweeksbefore(5,$time));
                  #just playing it safe, normally the first should be 
enough
  $timeoption = "+F".&firstdayofweek(1,$time)." 
+T".&lastdayofweek(1,$time);
  $logoption = "+C\"LOGFILE $logfile\" +C\"LOGFILE $logfile.1\" 
+C\"LOGFILE $logfile.2\"";
               #normally the last two should be enough
  analyze("$weeklyoption $timeoption $logoption >$lastweekstat");
  if ( -e "$lastweekstat" ) {
      chmod(0640,"$lastweekstat") ;
  }
  #Get rid of "false ampty reports"
  my ($hastogo)="";
  if (open (LASTWEEK,$lastweekstat)) {
    my ($line);
    while ($line=<LASTWEEK>) {
      next if ($line !~ /^x\sSR\s(\d+)/);
      last if ($1 != 0);
      last if (stat($logfile.1));
      $hastogo=1;
      last;
    }
    close(LASTWEEK);
    if ($hastogo) {unlink($lastweekstat)}
  }
}

#build statistics for this week
$timeoption = "+F".&firstdayofweek(0,$time)." +T".&lastdayofweek(0,$time);
$logoption = "+C\"LOGFILE $logfile\" +C\"LOGFILE $logfile.1\"";
analyze("$weeklyoption $timeoption $logoption >$thisweekstat");
if ( -e "$thisweekstat" ) {
    chmod(0640,"$thisweekstat");
}

if (@stattodelete) {
  map {unlink($_)} @stattodelete;
}
#Now we deal with the running total
#Update the cache if the logs have been rotated since last call
my (@statinfo);
if (@statinfo = stat ("$logfile.1")) {
  my ($logmtime,$cachemtime);
  $logmtime = $statinfo[9];
  if(@statinfo = stat ("$cachefile")) {
    $cachemtime = $statinfo[9];
  } else {
    $cachemtime = 0;
  }
  if ($cachemtime != $logmtime) {
    #build new cache
    analyze("$runningoption +C\"LOGFILE $logfile.1\" +C\"CACHEOUTFILE 
$cachefile.new\" +C\"OUTPUT NONE\"");
    utime($logmtime,$logmtime,"$cachefile.new");
    rename("$cachefile.new","$cachefile");
    if ( -e "$cachefile" ) {
        chmod(0640,"$cachefile");
    }
  }
}

analyze("$runningoption +C\"LOGFILE $logfile\" >$statdir/running");
if ( -e "$statdir/running" ) {
    chmod(0640,"$statdir/running") ;
}

#returns the number of the week of the year we were in x weeks before 
$time
sub getweeksbefore {
  my ($diff,$time) = @_;
  $time -= $oneweek*$diff; # $diff weeks ago
  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= 
localtime($time);
  if ($wday > $yday) { #this week started last year, so we count it there
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= 
localtime($time-$oneweek);
    $yday+=7;
  }
  return 1+($yday-$wday)/7; #1..53
}
sub firstdayofweek {
  my ($diff,$time) = @_;
  $time -= $oneweek*$diff; # $diff weeks ago
  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= 
localtime($time);
  $time -= $oneday*$wday; # last Sunday
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= localtime($time);
  $year = ($year>=100 ? $year%100 : $year);
  return sprintf ("%02d%02d%02d",$year,$mon+1,$mday);
}

sub lastdayofweek {
  my ($diff,$time) = @_;
  $time -= $oneweek*$diff; # $diff weeks ago
  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= 
localtime($time);
  $time += $oneday*(6-$wday); # this Saturday
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= localtime($time);
  $year = ($year>=100 ? $year%100 : $year);
  return sprintf ("%02d%02d%02d",$year,$mon+1,$mday);
}


wie ihr seht werden in dem script einige einstellungen per kommandozeile 
uebergen, so z.b. das cache-file. dies ist ziemlich gross,:
-rw-r-----    1 root     root         385M May  2 06:01 cache

wird das ganze ausgefuehrt, kann ich per top und ps faux genau mitschauen, 
wie das system platt gemacht wird, besser gesagt wie der speicher immer 
weniger wird.  es wird auch immer wieder kswapd angezeigt, sprich es wird 
fleissig auf die platte ausgelagert.

das system: 2.0 ghz celeron, 256 ram + 768 MB swap... 

irgendwann ist das system so langsam, dass gar nix mehr geht. ich denke 
das liegt an dem riesen cache file, oder? was kann ich tun? 

danke fuer eure muehe

andi leppert
_____________________________________________________________________
Der WEB.DE Virenschutz schuetzt Ihr Postfach vor dem Wurm Netsky.A-P!
Kostenfrei fuer alle FreeMail Nutzer. http://f.web.de/?mc=021157

+------------------------------------------------------------------------
|  TO UNSUBSCRIBE from this list:
|    http://lists.isite.net/listgate/analog-help/unsubscribe.html
|
|  Digest version: http://lists.isite.net/listgate/analog-help-digest/
|  Usenet version: news://news.gmane.org/gmane.comp.web.analog.general
|  List archives:  http://www.analog.cx/docs/mailing.html#listarchives
+------------------------------------------------------------------------



+------------------------------------------------------------------------
|  TO UNSUBSCRIBE from this list:
|    http://lists.isite.net/listgate/analog-help/unsubscribe.html
|
|  Digest version: http://lists.isite.net/listgate/analog-help-digest/
|  Usenet version: news://news.gmane.org/gmane.comp.web.analog.general
|  List archives:  http://www.analog.cx/docs/mailing.html#listarchives
+------------------------------------------------------------------------

Reply via email to