[PHP] Wyciek pamięci |
[PHP] Wyciek pamięci |
8.02.2018, 17:56:29
Post
#41
|
|
Grupa: Zarejestrowani Postów: 3 033 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) |
Ale jest, bo nie wywołany jest destruct na starym Exception wiec, gc nie może sprzątać, bo jak pamiętamy PHP zlicza referencje
|
|
|
9.02.2018, 23:36:39
Post
#42
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
Jeśli masz znaczną ilość faili, to może przed próbą pobrania zawartości strony odczytaj samą wartość nagłówka HTTP i sprawdzaj czy to nie 404. mam na myśli coś takiego, pobierasz tylko nagłówki odpowiedzi serwera i wyciągasz sam kod http odpowiedzi:
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
9.02.2018, 23:52:51
Post
#43
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
Darko, nie obraź się, ale wszystkie Twoje odpowiedzi w tym temacie (łącznie z powyższą) są idiotyczne. Sugerujesz teraz, żeby spowolnić cały crawler dwukrotnie tylko po to, żeby uniknąć wyjątku? Przecież wiadomo, że wąskim gardłem wszelkich webowych crawlerów jest czas odpowiedzi serwera zewnętrznego. Poczytaj ten temat i inne podobne tematy, żeby poznać konsolowe i crawlerowe zastosowanie PHP. Ubolewam nad tym, że przez całą noc crawluję zaledwie 20-30 tys. wyników, ale nieeee - spowolnię sobie to do 10-15 tys., żeby nie wyrzucać wyjątków. Yeah!
Jakbym już miał unikać wyjątków, to przecież mogę od razu użyć cURL-a, który wyjątków dla 404 nie wywala. Chciałem uprościć kod i nauczyć się czegoś więcej o zarządzaniu pamięcią w sytuacji wyrzucania wyjątków. Ten post edytował SmokAnalog 9.02.2018, 23:53:21 |
|
|
10.02.2018, 02:29:44
Post
#44
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
To teraz Ty się nie obraź, bo już mnie lekko irytujesz swoją impertynencją w tym i nie tylko w tym temacie. Najpierw sam sobie tworzysz wyimaginowany problem i wprowadzasz ludzi, którzy chcą się wspólnie zmóżdzyć z Tobą w błąd, nie podając pełnego kodu, a jedynie jakieś wyrywki. Pewnie. Domyślamy się wszyscy, że masz swój error handler... Patrz! unset zwalnia pamięć! Eureka! Następnie drążysz temat zarządzania pamięcią, na które to dość specyficzne w PHP zarządzanie nie masz totalnie żadnego wpływu i głową muru nie przebijesz, by na końcu określić czyjąś wypowiedź jako idiotyczną. Świetnie. Bawmy się tak dalej.
Użyj curla i nie płacz, że wolno działa, albo, że skrypt zżera za dużo pamięci. Przez podejście takich ludzi, jak Ty, o społeczności skupionej wokół języka PHP jeszcze długo będzie się mówić źle i tylko źle. Zamiast skupić się na użyteczności i przydatności kodu, a przede wszystkim na jego wartości biznesowej, lecisz na forum ze sztucznie stworzonym problemem, którego tak naprawdę nie ma. Założę się, że nawet nie raczyłeś sprawdzić curlowego rozwiązania, ale z góry zakładasz, że będzie działało znacznie wolniej. Poczytaj o curl_multi_init, curl_multi_exec, wykonywaniu jednoczesnym żądań korzystając z tzw. gniazd nieblokujących, asynchronicznie. Jakby to dobrze napisać, to ten Twój crawlerek będzie zapierdzielał jeszcze szybciej niż z kupą niepotrzebnych wyjątków i skopiowanym całym backtracem zupełnie niepotrzebnie. Jak znasz odrobinę języka C to polecam lekturę źródeł PHP, tam naprawdę więcej nauczysz się o zarządzaniu pamięcią, niż poprzez takie eksperymenty. Zresztą - nawet jeśli ten crawler będzie ciut wolniejszy, to chyba lepiej troszkę wolniej, ale niech w ogóle działa i nie wali błędami niż crawler, który po prostu nie działa... PHP jeszcze Cię wiele razy zaskoczy. Idiotyczne są takie pseudo problemy. Tyle z mojej strony, trzymaj się, buziaki, pozdrówki. ps. nie jesteś w stanie mnie obrazić. Ten post edytował darko 10.02.2018, 02:38:35 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
10.02.2018, 03:52:36
Post
#45
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
No ciekawe jak przyśpieszysz w kodzie crawlera przysyłanie odpowiedzi ze źródła, na które nie masz wpływu. Coś tam Ci świta z zarządzaniem pamięci, ale sam się gubisz. Jeszcze przed chwilą mówiłeś, że PHP się nie nadaje do daemonów i crawlerów, co jest kompletną bzdurą.
Akurat unset w catch nie jest powszechnie znaną techniką, bo nie jest oczywistym faktem to co się dzieje z wyjątkami w pamięci. Lepiej być impertynenckim niż niekompetentnym i wypowiadać się w tematach, o których się nie ma pojęcia, zamiast grzecznie czekać na odpowiedź kogoś, kto się zna. A problem nie jest wyimaginowany. Bardzo często chce się zachować strukturę z wyjątkami i dobrze jest wiedzieć jak zaradzić zaśmiecaniu pamięci w pętli try..catch. Najpierw mówiłeś coś innego, teraz mówisz coś innego, więc grzecznie przyznaj się do błędu zamiast teraz udawać eksperta w tym temacie. |
|
|
10.02.2018, 13:56:35
Post
#46
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) |
Darko, nie oUbolewam nad tym, że przez całą noc crawluję zaledwie 20-30 tys. wyników, Jeśli to za mało to mam kilka propozycji * cURL zamiast file_get_contnets (w wielu wypadkach cURL jest szybsze, więcej rzeczy można ustawić) * curl_multi - aby zwielokrotnić ilość pobieranych zasobów * kilka procesów na raz Prosty przykład:
Test (obcięte wyniki do dwóch pierwszych i ostatnich)
Wersja na curl:
A bez curl_setopt($ch, CURLOPT_HEADER, 0); trwało porównywalnie do wersji z file_get_contents:
Wersja z curl_multi
Podsumowanie * file_get_contents: 1m8.822s * curl: 0m48.066s * curl_multi: 0m32.255s Ten post edytował vokiel 10.02.2018, 13:59:38 -------------------- |
|
|
10.02.2018, 14:06:37
Post
#47
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
Jeszcze przed chwilą mówiłeś, że PHP się nie nadaje do daemonów i crawlerów, co jest kompletną bzdurą. Najpierw mówiłeś coś innego, teraz mówisz coś innego, więc grzecznie przyznaj się do błędu zamiast teraz udawać eksperta w tym temacie. Błędu? Jakiego błędu? Ja podtrzymuję to, co napisałem. Do napisania wydajnego crawlera ludzie wybierają inne niż php narzędzia: perl, python, javę, a nawet basha czy node.js. Rozumiem, że Ty jesteś z tych, co uważają, że programowanie zaczyna się w momencie napisania pierwszej linii kodu. Dla mnie programowanie to najpierw dogłębna analiza problemu i dobranie optymalnego (czyt. najlepszego) narzędzia do danej sytuacji, a nie pisanie w tym, w czym wydaje Ci się, że umiesz to zrobić i jakoś to będzie. Jak widać, jakoś to nie będzie. Jakoś to nie jakość, a forum jest od rozwiązywania problemów, a nie od ich mnożenia. Vokiel już Ci podał na tacy kilka możliwych rozwiązań, ale pewnie i tak będziesz się upierał przy swoim, że po co, że na co tak itd. Kończę tę jałową przepychankę, bo pojawiają się z Twojej strony argumenty z półki ad personam, co nigdy dla poważnej rozmowy niczego dobrego nie wróżyło. Ponownie pozdrawiam Cię i mimo wszystko życzę Ci powodzenia i owocnej nauki. Miłego dnia. -------------------- Nie pomagam na pw, tylko forum.
|
|
|
11.02.2018, 19:35:00
Post
#48
|
|
Grupa: Moderatorzy Postów: 6 070 Pomógł: 860 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
Panowie, nie ma się co tak napinać. Każdy z Was wnosi konkrety do dyskusji nawet jeśli zdania są podzielone. Sam z ciekawością czytam wypowiedzi jednego i drugiego. Można się spierać ale trzymajmy poziom, osobiste wycieczki są daremne. Nie jesteście zapewne nastolatkami więc powinniście podejść do dyskusji na odpowiednim poziomie. Każda wypowiedź jest cenna i tego się trzymajmy. Żaden z Was chyba nie pisze po to żeby dogryźć drugiemu. Nie ma co być uszczypliwymi.
|
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 14:46 |