[PHP] Geheugen probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • []InTeR[]
  • Registratie: Januari 2001
  • Laatst online: 31-12-2023
We hebben hier een vreemd probleem.

Hopenlijks komt het iemand bekend voor.

Als we op onze test server een bestandje van 174 regels met require_once includeren, gebruikt deze 7kb.

Het bestand bestaad uit een class, er staat geen programmatuur buiten deze class dus er wordt nog niks uitgevoerd. We doen voor de rest ook nog niks op de pagina's.

Het zelfde bestandje op onze live server gebruikt 30kb.

Iets wat natuurlijk voor 1 bestandje niet zo erg is, maar als je een framework hebt met honderden php bestanden die worden ingeladen wordt het verschil nogal groot.

Configuratie:
PHP Version 5.1.2
Apache 2.0.52
Zend Platform Enterprise Version 3.0.3
Red Hat

Shit doesn't happen by it self, it's made by a arsehole.


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Weet je zeker dat je testmethode goed is? Meet je niet verschillende dingen of meet je niet teveel? Is er een verschil tussen beide configuraties?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Het is erg lastig om hier iets zinnigs over te zeggen. Allereerst mis ik je concrete vraag, maar ik ga er van uit dat die moet zijn "Wat kan de oorzaak hiervan zijn?". Nou, best veel. Maar dat is een geval van zoeken naar een boom, midden in een groot bos, waar het blad is afgevallen wat jij in je hand hebt.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • []InTeR[]
  • Registratie: Januari 2001
  • Laatst online: 31-12-2023
Alles is het zelfde, tot aan de build versies van Zend en php.
Het O.S. is iets anders maar dat zou niet zoveel invloed mogen hebben.

Wat de 'test' is:
$b = memory_get_usage();
require_once($sFileLocation);
$GLOBALS['debugmem'][] = '*after autoloader require_once('.$sFileLocation.') memusage '.floor((memory_get_usage()-$b)/1024).'kb';
Het is voor velen mischien een vraag die nergens op slaat, maar ik hoop dat iemand het probleem herkent. Aangezien we hier van alles al hebben geprobeerd. En google levert ook weinig nuttigs op.

Shit doesn't happen by it self, it's made by a arsehole.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Maar je test zegt niks over wat het script doet. Alleen een include inladen gaat je geen verschil opleveren, de functie van die include kan dat echter wel doen. Met andere woorden, vertel eens wat dat bestand precies doet?

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
[]InTeR[] schreef op dinsdag 02 december 2008 @ 10:46:
maar als je een framework hebt met honderden php bestanden die worden ingeladen wordt het verschil nogal groot.
Als je die honderden php-bestanden ook daadwerkelijk inlaadt moet je je wellicht ook afvragen of die functionaliteit ook daadwerkelijk allemaal nodig is.

Afgezien daarvan zou ik er maar van uit gaan dat een standaard php-pagina verwerken al gauw enkele megabytes kost, dus wat dat betreft hoeft die paar honderd kb niet zo'n groot probleem te zijn.

Acties:
  • 0 Henk 'm!

  • []InTeR[]
  • Registratie: Januari 2001
  • Laatst online: 31-12-2023
MueR schreef op dinsdag 02 december 2008 @ 11:15:
Maar je test zegt niks over wat het script doet. Alleen een include inladen gaat je geen verschil opleveren, de functie van die include kan dat echter wel doen. Met andere woorden, vertel eens wat dat bestand precies doet?
Dat is het probleem dus, het bestand doet nog niks, het is een klein classje van 75 regels, waar we vervolgens nog niks mee doen. Waar dus al wel een 23kb verschil in zit.
ACM schreef op dinsdag 02 december 2008 @ 11:21:
[...]

Als je die honderden php-bestanden ook daadwerkelijk inlaadt moet je je wellicht ook afvragen of die functionaliteit ook daadwerkelijk allemaal nodig is.

Afgezien daarvan zou ik er maar van uit gaan dat een standaard php-pagina verwerken al gauw enkele megabytes kost, dus wat dat betreft hoeft die paar honderd kb niet zo'n groot probleem te zijn.
Op onze test server kost een pagina, dat z'n 140 bestanden nodig heeft. Inderdaad z'n 2mb.
Op de live server gebruikt deze pagina 13mb.

Als we weten welke functionaliteiten allemaal gebouwt zijn, zullen we dingen gaan cachen zodat deze minder betanden nodig hebben.

Het verschil zit hem in de 'interne werking' van php. We zijn al mb's kwijt aan het inladen van bestanden, voordat we er uberhoubt wat me doen. Iets wat in de ontwikkel omgeving niet het geval is.

Dus het uiteindeijke 23kb 'overhead' voor 1 bestand met 75 regels is voor ons dus een groot probleem, aangezien de duizenden regels code hebben.

Shit doesn't happen by it self, it's made by a arsehole.


Acties:
  • 0 Henk 'm!

Verwijderd

Zodra je met OOP en functies gaat werken, zeker als je classes gaat extenden, kan het geheugengebruik oplopen. Het is niet heel vreemd als dit op twee verschillende serverconfiguraties ook een verschil in geheugengebruik ontstaat. Ik zou kijken of je kunt ontdekken waar de verschillen zitten in configuratie; als het geheugenverbruik op de testserver lager ligt dan wil je deze configuratie zo veel mogelijk repliceren.

In de tussentijd zou ik sowieso absoluut kijken of je niet bepaalde delen van je code kunt optimaliseren of zelfs lozen. Als je in een half uurtje snoeien je geheugenverbruik kunt halveren dan zou ik dat verkiezen boven het straks plaatsen van een extra server ;-)

Acties:
  • 0 Henk 'm!

  • sub0kelvin
  • Registratie: September 2002
  • Laatst online: 10-08-2023
Heeft de test server per ongeluk een ingeschakelde optimizer die de live server niet heeft? Dat soort optimizers kunnen het geheugengebruik drastisch doen verminderen.

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:01
Zijn er ook verschillen als je memory_get_usage() met true als argument gebruikt?

Aanrader: installeer xdebug en analyseer daarmee wat er gebeurt. Je kunt dan per function call zien wat het geheugengebruik is en waar de verschillen zitten.
Pagina: 1