Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Duże zużycie ram przy skrypcie wywołanym w konsoli
athabus
post
Post #1





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Mam taki problem z pogranicza php.

W skrócie na serwerze stoi aplikacja webowa z API. Na tym samym serwerze wywołuję skrypt php w konsoli, który używa tego api do aktualizacji pewnych rzeczy.

Cała filozofia skryptu wygląda tak:
  1. $items=pobierzDane();
  2.  
  3. foreach ($items as item){
  4. $api->updateItem($item)
  5. }


Wszystko działa ładnie, ale... problem pojawia się, gdy jest bardzo dużo elementów do aktualizacji (kilkadziesiąt tysięcy wywołań api w pętli). Po prostu z czasem rośnie zużycie ram i wszystko zaczyna działać coraz wolniej i wolniej. Np. przez pierwsze 2-4 minuty mam aktualizacje 2-5 elementów na sekundę, a np. w 20 minucie działania skryptu jest to 1 element na 2 sekundy.

Jest jakiś sposób aby tą pamięć jakoś uwolnić z poziomu skryptu konsolowego? Nie wiem ogólnie nawet o co dokładnie pytam - chodzi mi o coś takiego aby zwolnić wszystkie zasoby i iść dalej. Ogólnie myślicie, że problemem jest coś w skrypcie konsolowym czy jednak po prostu bardzo duża ilość zapytań do API powoduje taki efekt? Wydaje mi się, że problem leży raczej w skrypcie konsolowym, bo api za każdym razem jest wywoływane i po wywołaniu w teorii pamięć powinna się zwalniać.

Jeśli w czymś może to pomóc to samo api pochodzi ze skryptu Prestashop i chodzi o aktualizację danych produktów, kombinacji etc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. PHP sam w sobie robi takie "freeMemory()" - poczytaj o GC. Nie zmienia to jednak faktu, że nadal możesz doprowadzać czy to do wycieków pamięci czy poprzez zachowywanie (w jakiś zapewne niebezpośredni sposó(IMG:style_emoticons/default/cool.gif) referencji do jakiś obiektów uniemożliwiać GC-owi zwolnienie zasobów zajmowanych przez nie.
2. Już samo wykorzystanie foreach'a może negatywnie wpływać na zużycie pamięci.
3. Domyślam się, że prawdziwy kod jest sporawy, ale bez pokazania go nie ma możliwości zasugerowania jakiegokolwiek sensownego rozwiązania.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 29.12.2025 - 08:53