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:
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. |
|
|
|
![]() |
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. |
|
|
|
athabus Duże zużycie ram przy skrypcie wywołanym w konsoli 25.04.2017, 10:43:00
nospor 1)
A czy to API nie posiada metody, ktora pozwala ... 25.04.2017, 11:42:43
Crozin Zapewne w pobierzDane bądź updateItem (tak na 90% ... 25.04.2017, 12:13:27
Pyton_000 A nie możesz sobie napisać raw sql które zrobią to... 25.04.2017, 12:34:30
athabus Cytat(Crozin @ 25.04.2017, 13:13:27 )... 25.04.2017, 12:50:22
Crozin 1. PHP sam w sobie robi takie "freeMemory()... 25.04.2017, 16:18:27
athabus Dzięki Crozin - Garbage Collector znam, ale chyba ... 26.04.2017, 08:33:56 ![]() ![]() |
|
Aktualny czas: 2.01.2026 - 06:14 |