[PHP/MySQL] Server hangt zich op

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik heb een scriptje draaien, dat elke minuut wat data van wat servers aftrekt, en dit in een database dumpt. Werkt prima, behalve als de database plat ligt. Deze ligt af en toe plat, (door nog onbekende redenen).

Het probleem is echter, als dit scriptje bezig is, en de database is er niet, dan trekt dit scriptje zomaar de volle 100% van de proc weg. Hij genereert gewoonweg geen timeout ofzo op de database. Als ik een scriptje draai in mn browser, krijg ik een nette timeout, en een error message. Draai ik een scriptje vanaf de shell (of in dit geval, via crontab), dan krijg ik geen timout, geen error, maar gaat hij lekker de CPU opknopen.

Iemand enig idee waar dit aan ligt? Ik heb er niks zinnigs over gevonden op internet.

Dit is mn query scriptje:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  function doquery($sql)
  { // connects to server, selects database, and performs query
    global $DB_HOST, $DB_USER, $DB_PASS, $DB_DBASE, $number_queries;
    @$link = mysql_connect($DB_HOST, $DB_USER, $DB_PASS) || die(error("dbase_noserver"));
    @$db = mysql_select_db($DB_DBASE) || die(error("dbase_nodbase"));
    $sql_query = mysql_query($sql);
    $number_queries++;
    if(!$sql_query)
    {
      return false;
    }
    else
    {
      return $sql_query;
    }
  }


edit:

even wat info over de server:
we draaien FreeBSD, Apache 1.3nogwat (kan het niet checken, want de server is net weer gecrasht, en ik kan hem niet vanaf thuis booten uiteraard), en PHP4.2.1 of iets in die buurt (niet de nieuwste iig).

[ Voor 11% gewijzigd door Grijze Vos op 30-03-2003 04:56 . Reden: typo + toevoeging ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

open je iederekeer een connectie voor iedere query? waarom open je niet 1 maal de connectie en dan continue je query..

dus bv

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function openConnection()
{
    global $DB_HOST, $DB_USER, $DB_PASS, $DB_DBASE, $number_queries; 
    @$link = mysql_connect($DB_HOST, $DB_USER, $DB_PASS) || die(error("dbase_noserver")); 
    @$db = mysql_select_db($DB_DBASE) || die(error("dbase_nodbase")); 
}

function doQuery($sql)
{
    global $DB_HOST, $DB_USER, $DB_PASS, $DB_DBASE, $number_queries; 
    $sql_query = mysql_query($sql); 
    $number_queries++; 
    if(!$sql_query) 
    { 
      return false; 
    } 
    else 
    { 
      return $sql_query; 
    } 
}


:)

Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 11:40
Waarom gebruik je die @'s, om de error's te onderdrukken? Niet doen...

|>


Acties:
  • 0 Henk 'm!

Verwijderd

Simon schreef op 30 March 2003 @ 11:14:
Waarom gebruik je die @'s, om de error's te onderdrukken? Niet doen...
soms is dat best handig, maar idd als je script hangt kan je deze het beste ff weg halen ;)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 30 March 2003 @ 11:48:
[...]

soms is dat best handig, maar idd als je script hangt kan je deze het beste ff weg halen ;)
ehm die dingen zijn echt nooit handig ;)
als je ze gebruikt dan weet je dat je script gewoon niet klopt en dat er errors in zitten :)

Acties:
  • 0 Henk 'm!

Verwijderd

Erkens schreef op 30 maart 2003 @ 12:36:
[...]

ehm die dingen zijn echt nooit handig ;)
als je ze gebruikt dan weet je dat je script gewoon niet klopt en dat er errors in zitten :)
fout, sommige bugs van php maken je script lelijk maar de functie werkt toch ;) dan laat je de error blocken maar krijg je de output wel :P

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 30 March 2003 @ 12:44:
[...]

fout, sommige bugs van php maken je script lelijk maar de functie werkt toch ;) dan laat je de error blocken maar krijg je de output wel :P
als je gewoon die fout normaal afhandeld heb je er geen last van ;)
maar laten we nu niet de discussie hierop schuiven, als iemand vies wilt proggen moet die het zelf maar weten.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ten eerste, || die is fout.
Zie: [rml]ACM in "[ PHP/MYSQL] een array met bezoekersroute"[/rml]
Ten tweede, de @ voor de $link is onzin, zet hem dan op zijn minst pal voor de mysql_connect functie.

En dan nog, wat doet de error() functie?

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik zal mn doquery functie wel eens herschrijven. Een van mn eerste dingen die ik heb gemaakt, toen ik net in PHP bezig was. Maar, dat is niet het probleem. Het probleem zit hem erin, dat vanaf een webbrowser de MYSQL error "database bestaat niet" gewoon goed wordt afgehandeld, en vanaf de shell niet, daar blijft het script gewoon hangen.

Ik heb het ook zonder die @s getest, krijg ik ook geen error ofzo. Die @s had ik eerst staan omdat ikop de webserver, (waar ik toen geen config rechten had), een paar warnings kreeg, en die kreeg ik niet uit het beeld..

error() is een functie die de errors voor mij afhandelt, de error die meegegeven wordt staat ergens opgeslagen, en wordt dan ge-output. Eventueel kan ik in die error functie logging aanzetten, zodat ik server-side kan nagaan waar er misbruik wordt gemaakt. (errors krijg iemand ook als ie geen access heeft, is makkelijk om na te gaan wie probeert te fokken met mn forum-code).

[ Voor 1% gewijzigd door Grijze Vos op 30-03-2003 15:41 . Reden: typo ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Grijze Vos schreef op 30 March 2003 @ 14:30:
Ik heb het ook zonder die @s getest, krijg ik ook geen error ofzo. Die @s had ik eerst staan omdat ikop de webserver, (waar ik toen ging config rechten had), een paar warnings kreeg, en die kreeg ik niet uit het beeld..
ehm, die warnings zijn niet voor niets natuurlijk :+
en met error_reporting(); kan je dat toch ook uitzetten :?

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ja Erkens, klopt. Maar zoals ik al zei, ik was net begonnen met PHP toendertijd, toen ik dat query scriptje had gemaakt. Wist er nog niet mega veel vanaf :)

Ik heb even lopen testen, en het was inderdaad de || die het scriptje de nek om draaide. Erg raar, dat dit alleen zich op de command line manifesteert, en niet als de request via een browser wordt gedaan. Maarja, dat is deel een van mijn probleem opgeslost. Nu moeten ik nog gaan uitzoeken waarom de MySQL server het in hemelsnaam 's nachts om 3 uur begeeft... Maar daar heb ik voorlopig geen hulp bij nodig...

Bedankt voor de hulp mensen...

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1