php/Apache/mod_ssl/ sessions in MySQL= httpd crash

Pagina: 1
Acties:

  • beany
  • Registratie: Juni 2001
  • Laatst online: 09:33

beany

Meeheheheheh

Topicstarter
Ok dan,

Ik heb de volgende situatie:

1 Linux server(SuSE 8.0)
Apache 1.3(laatste versie, niet 2.0)
Mod_ssl(ook laatste versie)
MySQL(je raad het al, ook de laatste versie)
PHP(en ja, ook de laatste versie)

1 PHP script, met het volgende(heb ik op een grote php site gevonden, let op dit werkt goed onder HTTP, alleen HTTPS geeft problemen):
PHP:
1
<? /* * CREATE TABLE sessions ( *      sesskey char(32) not null, *      expiry int(11) unsigned not null, *      value text not null, *      PRIMARY KEY (sesskey) * ); * --------------------------------------------------------------------------------------- * Include this file in your scripts before you call session_start(), you * don't have to do anything special after that. */$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");function sess_open($save_path, $session_name) {    return true;}function sess_close() {    return true;}function sess_read($key) {    global $SESS_LIFE;    $qry = "SELECT value FROM Sessions WHERE sesskey = '$key' AND expiry > " . time();    $qid = mysql_query($qry);    if (list($value) = mysql_fetch_row($qid)) {        return $value;    }    return false;}function sess_write($key, $val) {    global $SESS_LIFE;    $expiry = time() + $SESS_LIFE;    $value = addslashes($val);    $qry = "INSERT INTO Sessions VALUES ('$key', $expiry, '$value')";    $qid = mysql_query($qry);    if (! $qid) {        $qry = "UPDATE Sessions SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " . time();        $qid = mysql_query($qry);    }    return $qid;}function sess_destroy($key) {    $qry = "DELETE FROM Sessions WHERE sesskey = '$key'";    $qid = mysql_query($qry);    return $qid;}function sess_gc($maxlifetime) {    $qry = "DELETE FROM Sessions WHERE expiry < " . time();    $qid = mysql_query($qry);    return mysql_affected_rows();}session_set_save_handler(    "sess_open",    "sess_close",    "sess_read",    "sess_write",    "sess_destroy",    "sess_gc");?>

Connectie naar MySQL is aanwezig. De grap is: dit werkt. Althans, onder HTTP! Zodra ik overschakel naar HTTPS, en in mijn code staat:
PHP:
1
<?session_register("eenvariabel");?>

dan crashed apache(met de melding in de logs: '[notice] child pid 2670 exit signal Segmentation fault (11)') en krijgt de gebruiker van de website een 'Page cannot be displayed'. Nou, niet helemaal waar. Hij crashed AF EN TOE. Ongeveer 7 op de 10 keer gaat het goed. Maar dit is afhankelijk van de windrichting of zo, want zo gaat het 20x goed, en zo 2x goed voordat er een crash is.

Op het moment dat ik de sessies niet in een MySQL database laat opslaan, dus de bovenstaande code compleet weghaal waardoor sessies op schijf worden opgeslagen(in mij geval in de /tmp directory) gaat het perfect! Vanwege wat hoge load op de server op sommige momenten, leek mij MySQL een betere en snellere oplossing. Maar met een crashende apache is dit natuurlijk niet handig.

Iemand enig idee wat hier het probleem is???

En ook al is het zo dat de op schijf opslaan variant sneller en beter is, dan nog ben ik erg benieuwd naar een oplossing/oorzaak van dit probleem :)


edit: was PHP boven in het lijstje vergeten...

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • Grum
  • Registratie: Juni 2001
  • Niet online
Om je fantasie maar even de wereld uit te helpen ...

Wat doet mysql met de data die jij in de database zet ? precies die schrijftie weg op de hd :) Dus wat is mysql voor jou in dit geval? een extra layer tussen de php en de hd ... sneller ? .. nope ;)

  • beany
  • Registratie: Juni 2001
  • Laatst online: 09:33

beany

Meeheheheheh

Topicstarter
Op woensdag 08 mei 2002 10:58 schreef Grum het volgende:
Om je fantasie maar even de wereld uit te helpen ...

Wat doet mysql met de data die jij in de database zet ? precies die schrijftie weg op de hd :) Dus wat is mysql voor jou in dit geval? een extra layer tussen de php en de hd ... sneller ? .. nope ;)
Hier ben ik het niet helemaal mee eens. Een filesystem kan bij grote hoeveelheden bestanden(lees veel sessions) traag worden. Een database heeft zijn zaakjes geindexeerd(als de tabellen goed zijn aangemaakt). Dus kan het opzoeken van een sessie in een database sneller zijn dan opzoeken op schijf. Denk ik... ;)

Dus jij zegt dat databases compleet overbodig zijn omdat data ook rechtstreeks op de schijf geplaatst kan worden. Stuur eens een mailtje naar Oracle/IBM/Microsoft :)

edit: toevoeging

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • Grum
  • Registratie: Juni 2001
  • Niet online
beany: Dus jij zegt dat databases compleet overbodig zijn omdat data ook rechtstreeks op de schijf geplaatst kan worden. Stuur eens een mailtje naar Oracle/IBM/Microsoft

Dat zei ik dus niet he :D

En tuurlijk cached een db data, je hd ook.
Tuurlijk heeft je db indices, je doet een 'where' wat op je hd niet nodig is. (insert 1 korrel zout)

Het zwakke punt van sessions zijn dat ze niet veel data kunnen hebben zonder sloom te worden en dat komt alleen maar omdat et (un)serializen sloom is.

Verwijderd

mysql features: (directly from website)
  • Very fast B-tree disk tables with index compression.
  • A very fast thread-based memory allocation system.
  • In-memory hash tables which are used as temporary tables.
overige info wat bv mysql doet om snelheid te houden.

  • beany
  • Registratie: Juni 2001
  • Laatst online: 09:33

beany

Meeheheheheh

Topicstarter
Op woensdag 08 mei 2002 11:05 schreef Grum het volgende:
beany: Dus jij zegt dat databases compleet overbodig zijn omdat data ook rechtstreeks op de schijf geplaatst kan worden. Stuur eens een mailtje naar Oracle/IBM/Microsoft

Dat zei ik dus niet he :D
Sorry, maar anders kan ik het niet lezen. Je zegt 'extra layer tussen php en hd ... sneller? nope '. Je zegt hiermee dus dat per definitie een database tussen een applicatie en de hd de boel trager maakt, of op zijn minst niet sneller. Of je moet je stelling anders formuleren, dat het in het geval van 1 tabel niet echt sneller zou zijn, al kan ik me daar ook niet in vinden. Maar dit was eigenlijk niet echt mijn vraag. Ik zit nog steeds met die crashende apache... Draai nu zonder MySQL(voor de sessies dan he) omdat de klanten het niet kunnen waarderen een Page cannot be Displayed op hun scherm te krijgen. Geef ze eens ongelijk :9

edit: stiekem je post aanpassen he ;) :+

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • Grum
  • Registratie: Juni 2001
  • Niet online
Het is db overhead vs io overhead en daar zijn ENORM veel factoren die meespelen.

  • beany
  • Registratie: Juni 2001
  • Laatst online: 09:33

beany

Meeheheheheh

Topicstarter
Op woensdag 08 mei 2002 11:15 schreef Grum het volgende:
Het is db overhead vs io overhead en daar zijn ENORM veel factoren die meespelen.
Daar kan ik me in vinden :). Maar toch ben ik benieuwd wat het probleem nou eigenlijk is. Sterker nog, soms zijn het aantal sessies enkele 1000en en het groeit eigenlijk. Dus ik wil op een gegeven moment wel weer terug kunnen gaan naar sessies via de DB zonder crashende apache...

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • Grum
  • Registratie: Juni 2001
  • Niet online
Het lijkt me niet dat et der sneller door zou worden hoor.

Het is hier nl ook c(++) vs php :)

  • beany
  • Registratie: Juni 2001
  • Laatst online: 09:33

beany

Meeheheheheh

Topicstarter
Op woensdag 08 mei 2002 11:22 schreef Grum het volgende:
Het lijkt me niet dat et der sneller door zou worden hoor.

Het is hier nl ook c(++) vs php :)
Nu ben ik je kwijt. Wat bedoel je hier precies mee?

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

topictitel ontcapst

  • Grum
  • Registratie: Juni 2001
  • Niet online
Nou .. jouw code (php) vs php's buildin code (c(++))

  • beany
  • Registratie: Juni 2001
  • Laatst online: 09:33

beany

Meeheheheheh

Topicstarter
Ah, ok. Maar de c(++) code zit dan wel met een filesystem in zijn maag. Met enkele duizenden files kan dat een vertragende factor gaan worden. Waar die grens ligt weet ik niet, maar ik kan me voorstellen dat een directory met duizenden of tienduizenden bestanden de snelheid niet ten goede komt. Een geindexeerd tabelletje kan dan sneller zijn.

Maar goed, dat is niet echt het probleem hier...

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 19-08 11:41
*schop*, ik ben eigenlijk ook wel benieuwd naar het antwoord :)

  • ggvw
  • Registratie: September 2001
  • Laatst online: 15-12-2024
*schop*

ja, ik ook wel... Ik heb hier namelijk (bijna) dezelfde systeemconfiguratie en precies hetzelfde probleem!

Sessies via mysql leek mij nou juist een leuke oplossing...

Zou dit een apache/php bug kunnen zijn?

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

We krijgen toch weer de /(P)H\1/ vs /C(+{2})?/ afweging.

/(P)H\1/ :
• Slaat sessie op in DB
• MySql cachet dat, en flusht als zijn cache vol loopt.

/C+{2}?/ :
• Slaat sessie op op schijf
• OS cachet dat, maar flusht als die cache vol loopt.

In wezen is er helemaal geen verschil, het echte verschil is tussen de cachingmethoden van MySql vs Linux Filesystem en de snelheid van de code. Vooral op dit laatste punt verliezen custom-made sessions het, omdat serializen en deserializen nou eenmaal zo traag zijn. Voor het opslaan in een sessionfile serializeert PHP weliswaar je $_SESSION, maar dat is een snellere methode omdat de geserializeerde data niet geconverteerd hoeft te worden naar een scripting-string.

offtopic:
Voor mensen die geen regexpen kunnen lezen: /(P)H\1/ is PHP, /C+{2}?/ is C of C++

[ Voor 0% gewijzigd door kvdveer op 21-08-2002 16:11 . Reden: uitleg regexp ]

Localhost, sweet localhost

Pagina: 1