Cache chyba – Malformed journal file

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kucix
Člen | 33
+
0
-

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 | 8170
+
0
-

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
+
0
-

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 | 8170
+
0
-

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
+
0
-

@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
+
0
-

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
+
0
-

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
+
0
-

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…

Aurielle
Člen | 1281
+
0
-

Stáhni dev revizi, na validateControl tu byl hlášen bug a už je opravený…

kucix
Člen | 33
+
0
-

Díky, nestíhám sledovat všechny chyby, ale snažím se jet na novém nette i kvůli otestování a samozřejmě se mi zdá i lepší :-)

kucix
Člen | 33
+
0
-

Zdravím,

opravdu nikdo neví, co s touto chybou?

PHP Fatal error: Uncaught exception Nette\AmbiguousServiceException with message ‚Service named 'Nette\Caching\ICacheJournal‘ has already been registered.'

David Grudl
Nette Core | 8170
+
0
-

Je nutné addService volat co nejdřív, dříve, než se cache použije.

kucix
Člen | 33
+
0
-

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)

kucix
Člen | 33
+
0
-

K tomu automatickému odhlašování –

pomohlo přidat do bootstrapu:

<?php
Environment::getSession()->setOptions( array(
	'cookie_domain' => '.aumojekoule.cz',
));
?>
kucix
Člen | 33
+
0
-

hmm.. tak nic…
po čase – pár hodin – to odhlásí a už se nejde přihlásit …
divné to je… divné …

Nesetkal se s tím někdo ?