Cache chyba – Malformed journal file
- kucix
- Člen | 33
Zdravím,
narazil už někdo na chybu cachování při větší zátěži?
Chyba se stala při cca 200 požadavcích za sekundu na apache (aktivních tcp spojení dle serveru bylo 3000 a více)
[2010–11–10 01–36–38] PHP Fatal error: Uncaught exception
InvalidStateException with message
‚Malformed journal file
'/home/www/aumojekoule.cz/subdomeny/www/core/temp/cache/fj‘.'
in /home/www/aumojekoule.cz/subdomeny/www/core/libs/Nette/loader.php:1422
@ http://aumojekoule.cz/…/nejnovejsi/
Vygenerovaná chyba: http://exception.aumojekoule.cz/
Používám Nette Framework 2.0-dev (revision a8e74c1 released on 2010–10–14)
V bootstrapu mám:
<?php
Environment::getContext()
->addService(
'Nette\\Caching\\ICacheJournal',
new \Nette\Caching\SqliteJournal(
Environment::getVariable('tempDir') . '/cache/cachejournal.db'
)
);
?>
FileJournal blbnul – nefunguje mazání cache podle tagů, tak jsem nahodil sqlite a takto ho inicializoval.
Editoval kucix (10. 11. 2010 10:17)
- David Grudl
- Nette Core | 8228
Divné je, že tam máš nastavený SqliteJournal a chyba byla v souboru „fj“, který vytváří FileJournal. Nemůže být problém někde tímto směrem?
- kucix
- Člen | 33
No jo, ale čím to.. když se v bootstrapu nastaví sqliteJournal…
Leda přepsat v nette do původní podoby, kdy se používal
sqliteJournal …
A další věc je, že stránky nefungovaly, zobrazovala se chyba 500 .. jako by to bylo závislé na tom fileJournalu..
Klidně bych používal FileJournal, ale nefungovalo tam clean s tagy … vždy se cache smazala, až vypršel čas …
Nejsem asi až tak dobrý v nette a třeba problém s voláním __wakeup jsem řešil odmazáním NotImplementedException …
- David Grudl
- Nette Core | 8228
Problém s nastavením service jsem v poslední revizi opravil, takže ten SqliteJournal se nastaví. Problémy s FileJournalem vyřešit neumím, napíšu Jakubu Kulhanovi.
- jakubkulhan
- Člen | 55
@kucix
Bohužel nedokážu reprodukovat, jelikož nemám k dispozici dostatečně
silný stroj. Jaký operační systém na serveru běžel (Windows, Linux, …)?
Potřeboval bych se důkladněji podívat na ten vadný fj
soubor,
jestli jsi ho ještě nevymazal, či v něm není něco tajného. Jestli jsi ho
vymazal, nevíš, jestli např. neskončil prázdný (tzn. měl délku
0 bytů)? Běžel server před zátěží 200req/s bez problémů (nespadl
někdy předtím kupř.)?
- kucix
- Člen | 33
Jedná se o linuxový stroj s Debianem 5.0.3 … Apache/2.2.16 (Debian) DAV/2 SVN/1.5.1 PHP/5.3.3–0.dotdeb.1 with Suhosin-Patch
fj soubor nemám, první, co mě napadlo bylo vymazat kompletně cache a jelikož jsem to dělal přes SSH, tak jsem se ani nedíval na velikost souboru.
Předtím to běželo celkem v pohodě, do loadu 5 … jednou cache nějak
„zablbnula“ a každý request byl asi 50× zátěžovější, load šel
hodně rychle nad 100 atd … smazání cache to vyřešilo, přisuzoval jsem
to restartu apache a nedokončenému zápisu do souboru.
ALe teď se žádný restart nekonal…
- jakubkulhan
- Člen | 55
kucix napsal(a):
fj soubor nemám, první, co mě napadlo bylo vymazat kompletně cache a jelikož jsem to dělal přes SSH, tak jsem se ani nedíval na velikost souboru.
Obávám se, že bez toho, abych ho prozkoumal, neodhalím, kde se zapisování zvrtlo :-(
Předtím to běželo celkem v pohodě, do loadu 5 … jednou cache nějak „zablbnula“ a každý request byl asi 50× zátěžovější, load šel hodně rychle nad 100 atd …
FileJournal se chová v konkurenčnějším prostředí hůře než SqliteJournal (viz můj benchmark – už při 30 konkurenčních zápisech byl ~2krát pomalejší). V takových případech bych doporučil používat SqliteJournal. Což samozřejmě neomlouvá, že se FileJournal povedlo poškodit vlastní soubor.
- kucix
- Člen | 33
Po aktualizaci na novou alpha verzi mám tyto dvě chyby …
http://exception.aumojekoule.cz/cache.html
a
http://exception.aumojekoule.cz/control.html
Nevíte, co s tím?
přestalo fungovat {control name} .. a to jen někde… někde to funguje dobře, např paginator funguje…
- kucix
- Člen | 33
Volám v bootstrapu
<?php
use Nette\Debug;
use Nette\Environment;
use Nette\Application\Route;
use Nette\Application\SimpleRouter;
require LIBS_DIR . '/Nette/loader.php';
Debug::enable(Debug::DEVELOPMENT, APP_DIR . "/log/", "webmaster@aumojekoule.cz");
Debug::$maxDepth = 8;
Environment::setMode(Environment::DEVELOPMENT);
$application = Environment::getApplication();
$application->errorPresenter = 'Error';
$application->catchExceptions = false; //TRUE pro ostry provoz
Environment::getSession()->setExpiration("+ 365 days"); // doba musí být minimálně taková, jako nastavená expirace.
Environment::loadConfig();
// SqliteJournal misto FileJournal
Environment::getContext()->addService(
'Nette\\Caching\\ICacheJournal',
new \Nette\Caching\SqliteJournal(
Environment::getVariable('tempDir') . '/cache/cachejournal.db')
);
//dál už jen připojení Dibi k databázi, routy a application->run();
?>
A je tam i další věc s odhlašováním při zavření
prohlížeče…
V bootstrapu mám 365 dní – je to tam vidět a v komponentě
„loginForm“ mám v submitted
<?php
public function loginFormSubmitted(AppForm $form) {
try {
$user = \Nette\Environment::getUser();
$values = $form->getValues();
$user->setExpiration( "+ 14 days", false); // 14 dni
$user->login($values['username'], $values['password']);
\Nette\Environment::getApplication()->getPresenter()->flashMessage("Přihlášení proběhlo úspěšně", "success");
\Nette\Environment::getApplication()->getPresenter()->redirect("this");
} catch (AuthenticationException $e) {
\Nette\Environment::getApplication()->getPresenter()->flashMessage($e->getMessage(), "error");
}
}
?>
A stejně to odhlašuje…
Editoval kucix (23. 11. 2010 16:00)