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
athabus
post
Post #2





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

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


Ad1. Niestety nie posiada. Co gorsza to jest API, gdzie aktualizacja to pobranie danego rekordu i potem odesłanie wyniku zmodyfikowanego, czyli update to minimum 2 zapytania do API. Często nawet więcej niż 2 bo rekordy są powiązane i trzeba podobnie updatować te rekordy - ilość zapytań rośnie więc bardzo szybko.

Ad2. W tym przypadku z zapytania powstaje tablica dość mała. Rekordów jest dużo, ale raczej lekkie dane. W omawianym przypadku to po prostu lista użytkowników z podstawowymi danymi, czyli email, login, hasło itp. To raczej nie kłopot w tym konkretnym przypadku. Mówiąc o ramie to mam na myśli tutaj localhosta z 8gb ramu lub serwer vps z 4gb ramu, więc raczej jest to coś "grubszego". Na localhoście jak włączyłem sobie podgląd zużycia ramu, to wygląda to tak, że na początku jest ok, ale z czasem ram jest wykorzystany w 100% i zaczyna się orka po procesorze.

Oczywiście wystarczy przerwać skrypt i puścić go od nowa - i znów przez pierwsze 2-3 minuty działa sprawnie i stopniowo zwalnia.

Na razie po prostu stosuję dzielenie danych na kilka partii, ale z czysto "naukowej" ciekawości szukam lepszego rozwiązania. W perspektywie mam do napisania skrypt, który wywoła api w pętli jakieś... milion razy i chciałbym to zrobić w jednym wywołaniu bez dzielenia na kawałki.
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: 2.01.2026 - 06:14