PHP open_basedir a Magento Performance

Direktíva PHP open_basedir je bezpečnostná funkcia v rámci PHP, ktorá vám umožňuje určiť, ktoré súbory PHP smie otvárať. Pomocou open_basedir zadáte strom alebo stromy adresárov, ktoré môže PHP otvoriť a PHP neotvorí nič mimo týchto adresárov. Pri používaní open_basedir existujú negatívne vedľajšie účinky vo vzťahu k výkonu systému. Najdôležitejšie je, že keď je povolený open_basedir, cache PHP realpath bude vypnutá. Cache PHP realpath cache je dostupná v PHP od 5.1.0 a ukladá do cache cesty PHP vrátane súborov.

Ak prevádzkujete menšiu lokalitu s nízkym počtom súborov a relatívne plytkými cestami k adresárom, skutočnosť, že cesty k adresárom nebudú uložené do vyrovnávacej pamäte, nie je nevyhnutne nevyhnutná. Ale s aplikáciami, ako je Magento postavenými na Zend Framework, skončíte s veľkým počtom základných súborov s veľkou zahrnutou cestou a veľmi hlbokou adresárovou štruktúrou. V tejto situácii sa musíte uistiť, že vaše cesty sa uložia do vyrovnávacej pamäte s vyrovnávacou pamäťou realpath, čo znamená, že ponecháte open_basedir zakázaný.

Pri sledovaní zásobníka procesu PHP v obchode Magento uvidíte veľa volaní lstat podobných nasledujúcim:

[php]access(“/chroot/home/store/html/app/code/local/Core/Block/Template.php”, F_OK) = 0

čas (NULL) = 1268839768

lstat(“/chroot”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0

lstat(“/chroot/home”, {st_mode=S_IFDIR|0711, st_size=4096, …}) = 0

lstat(“/chroot/home/store”, {st_mode=S_IFDIR|S_ISGID|0751, st_size=4096, …}) = 0

lstat(“/chroot/home/store/html”, {st_mode=S_IFDIR|0777, st_size=4096, …}) = 0

lstat(“/chroot/home/store/html/app”, {st_mode=S_IFDIR|0777, st_size=4096, …}) = 0

lstat(“/chroot/home/store/html/app/code”, {st_mode=S_IFDIR|0777, st_size=4096, …}) = 0

lstat(“/chroot/home/store/html/app/code/local”, {st_mode=S_IFDIR|0777, st_size=4096, …}) = 0

lstat(“/chroot/home/store/html/app/code/local/Core”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0

lstat(“/chroot/home/store/html/app/code/local/Core/Block”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0

lstat(“/chroot/home/store/html/app/code/local/Core/Block/Template.php”, {st_mode=S_IFREG|0644, st_size=5968, …}) = 0[/php]

Keď je povolená vyrovnávacia pamäť realpath, počet týchto hovorov dramaticky klesne, pretože používané cesty budú uložené do vyrovnávacej pamäte, čím sa zabráni stromu volaní lstat, ktorý vidíte vyššie. Keď je povolená funkcia open_basedir, tieto cesty nemožno uložiť do vyrovnávacej pamäte, čo vyžaduje všetky volania lstat uvedené vyššie pri každom volaní súboru. Problém s touto situáciou je, že systém trávi značné množstvo času procesora vykonávaním systémových volaní namiesto spúšťania procesov v užívateľskej krajine. Ak vidíte značné množstvo času procesora stráveného v %sy, váš systém možno nepoužíva vyrovnávaciu pamäť realpath.

Čítať:  Tipy a triky na zlepšenie vyhľadávania produktov Magento

Aký zlý je teda výkon pri spustení Magento s povoleným open_basedir? Urobil som jednoduchý test, aby som to zistil. Nainštaloval som demo obchod Magento na testovací server a porovnal som počet volaní lstat s povoleným a zakázaným open_basedir pre jedno načítanie stránky produktu.

S povoleným open_basedir: 25998 volaní lstat().

So zakázaným open_basedir: 1155 volaní lstat().

Výsledným rozdielom bolo ďalších 24 843 volaní lstat potrebných na načítanie jednej stránky s povoleným open_basedir. Čo sa týka časov načítania stránky, existuje veľmi triviálny rozdiel pre načítanie jednej stránky bez iných súbežných procesov, ale akonáhle máte na serveri spustených veľa súbežných procesov načítania stránky, tieto volania lstat privedú server k prehľadávaniu. Problém sa zosilní, ak server beží na starších pomalých diskoch IDE alebo SATA.

Tu sa dozviete o našich spravovaných plánoch hostenia Magento, aby ste mohli začať s Hostinger.

Nové Publikácie:

ODPORÚČANIE