Autor Wątek: Problem z wydajnością Publikera  (Przeczytany 3421 razy)

valdoorf

  • Full Member
  • ***
  • Wiadomości: 111
  • Pomógł: 0
    • Zobacz profil
Problem z wydajnością Publikera
« dnia: 05 Listopad 2013, godz: 09:25 »
Witam wszystkich,

pisałem na privie do Publiker.pl, ale być może nie doszło wiec  zakładam osobny wątek.

Utworzyłem w Publikerze 21 grup linkowania, przeszły wszelakie testy itp...
Na serwerze czas wykonania skryptu ustawiłem na 120 sekund (2 minuty)
Ponadto uruchomiłem skrypt, który "odpala" crona co 5 sekund (20x) i czeka na wykonanie.
W cronie uruchomiłem wykonanie tego skryptu co minutę i co dwie.  Chodzi o pełne wykorzystanie serwera dedykowanego - po tym działaniu proc chodzi na ok 12Ghz (cztery rdzenie po 3Ghz)

Problem polega tylko na tym, że wpisów dodaje mi codziennie ok 60 a kolejka Cron rośnie niebotycznie  - w ciągu kilku dni urosła do ponad 180 000 rekordów. Oczywiście data zadań jest prawidłowa. Dlaczego Publiker nie wykonuje zadań szybciej, tylko je dodaje i kolejkuje ?

Co jest nie tak?
Kiedyś przy takich ustawieniach program dodawał po 11 000 wpisów dziennie
Czyszczenie zadań cron w programie nic nie daje - zadania przyrastają ponownie, a publiker nie dodaje. Wersja najnowsza.

Co jest nie tak ?

Pozdrawiam

wodnick

  • Sr. Member
  • ****
  • Wiadomości: 403
  • Pomógł: 11
    • Zobacz profil
Odp: Problem z wydajnością Publikera
« Odpowiedź #1 dnia: 05 Listopad 2013, godz: 11:10 »
Witam.

Pogubiłem się z tym odpalaniem skryptów z cronem odpalających crona.
Wiem, żeby zrozumieć rekurencje trzeba zrozumieć rekurencje ;)
Ale dla mnie to jest ciut przekomplikowane.

Podziel kolejkę CRON na tyle subkolejek ile masz zadań systemowych.
Każdą subkolejkę ustaw do wywołania w cronie co dwie minuty (120 sekund).
max_execution_time ustaw na 115 sekund (ważne).

Co jakiś czas zakładaj nową grupy kolejki i tam przerzucaj tylko zadania systemowe
Planowanie dodania do katalogu (linkowanie)
Planowanie dodania do katalogu (podlinkowanie)
Planowanie dodania do precla (linkowanie)
Planowanie dodania do precla (podlinkowanie)
pozostawiając macierzyste subkolejki aktywne (sprawdzanie dodania).

To powinno pomóc.

Z pozdrowieniami,
wodnick

valdoorf

  • Full Member
  • ***
  • Wiadomości: 111
  • Pomógł: 0
    • Zobacz profil
Odp: Problem z wydajnością Publikera
« Odpowiedź #2 dnia: 05 Listopad 2013, godz: 12:13 »
dzięki za info, mam w tym przykładzie pytanie:

Cytuj
max_execution_time ustaw na 115 sekund (ważne).

Jeśli ustawię tak w php.ini to automatycznie zmieni sie czas wykonywania cron w Publikerze.
Jak wiec ustawić cron na 120 sekund ?

valdoorf

  • Full Member
  • ***
  • Wiadomości: 111
  • Pomógł: 0
    • Zobacz profil
Odp: Problem z wydajnością Publikera
« Odpowiedź #3 dnia: 05 Listopad 2013, godz: 12:30 »
Ustawiłem Crona tak, by na 30 wywołań:

1x Planował dodania (wszystkie)
1x Sprawdzał konta email
1x Pingował
1x wykonywał sprawdzanie aktywności linków, czyścił tempy i aktualizował precle

na to przychodzi 26 wywołań Kolejki głównej. Raz na minutę wywołuję skrypt, który wgetem odpala Publikera - skrypt poniżej:

#!/bin/bash
#Lista pozycji do przetwarzania. Kazda z unikalnym numerem w nawiasie, kolejny zaczynajacy sie od 0. Calosc zapytania z cudzyslowiu podwojnym. W zapytaniu nie moze wystapic cudzyslow podwojny poza pcoczatkiem i koncem.
lista[0]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz/0/2 > /dev/null 2>&1"
lista[1]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz/0/3 > /dev/null 2>&1"
lista[2]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz/0/4 > /dev/null 2>&1"
lista[3]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz/0/5 > /dev/null 2>&1"
lista[4]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[5]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[6]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[7]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[8]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[9]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[10]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[11]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[12]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[13]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[14]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[15]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[16]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[17]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[18]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[19]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[20]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[21]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[22]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[23]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[24]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[25]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[26]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[27]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[28]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[29]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
lista[30]="wget -O /dev/null -q http://puliker.pl/index.php?gsPath=_cron/xxxyyyzzz > /dev/null 2>&1"
#interval
INT=5
#TU JUZ NIE DOTYKAMY ;-)
AKT=`date +%s`
OLD=$(($AKT+$INT));
A=0;
C=0;
while [ $((($OLD-`date +%s`))) -ne 0 ] && [ $A == 0 ]; do

for (( i = 0 ; i < ${#lista[@]} ; i++ ))
do
j=`echo ${lista[$i]} | awk '{print $3}'`
if ps ax | grep -v grep | grep "$j" > /dev/null; then
C=1;
fi
done

if [ $C==0 ]; then
A=1;
fi
# echo $(($OLD-`date +%s`));
echo "czekam";
done

if [ $A == 1 ]; then
for (( i = 0 ; i < ${#lista[@]} ; i++ ))
        do
`${lista[$i]}`
done
fi


wodnick

  • Sr. Member
  • ****
  • Wiadomości: 403
  • Pomógł: 11
    • Zobacz profil
Odp: Problem z wydajnością Publikera
« Odpowiedź #4 dnia: 05 Listopad 2013, godz: 12:32 »
Witaj.

AFAIK Publiker odczytuje wartość max_execution_time żeby wiedzieć, czy w danej sesji wywołania crona publikerowego (skryptu /index.php?gsPath=_cron/XXXXXXXXXX/ ) może jeszcze wykonać jakieś zadanie czy nie.
A crona nie ustawiasz nie w publikerze, tylko w systemie, w systemie na czas wykonania, tylko co jaki czas ma wykonywać zadanie.
W efekcie, każda subkolejka crona publikerowego zostanie wywołana co 120 sekund, a wykonywać się będzie 115 sekund, po czym nastąpi 5 sekundowa przerwa.
Ta przerwa to dla bezpieczeństwa i czas na maintenace dla systemu, chociażby baz danych.

Z pozdrowieniami,
wodnick

Edit. Niespecjalnie wiem po co ten skrypt. Ustaw obciążające subkolejki w CRONie systemowym co dwie minuty, ew. z przeplotem na parzyste minuty i nieparzyste (pół tak a pół tak), a mniej obciążające kolejki co x minut, 5, 10, 15, wg uznania.

Edit 2. Rozdziel na osobne subkolejki
Planowanie dodania do katalogu (linkowanie)
Planowanie dodania do katalogu (podlinkowanie)
Planowanie dodania do precla (linkowanie)
Planowanie dodania do precla (podlinkowanie)

W kolejce głównej zostaw tylko stare sprawdzania czy został opublikowany oraz nastepujące zadania systemowe:
Zmiana aktualnie używanego serwera proxy
Sprawdzanie wiadomości email (Email ID: 1)
Obsługa Systemów Wymiany Linków (SWL)
Czyszczenie danych tymczasowych
« Ostatnia zmiana: 05 Listopad 2013, godz: 12:38 wysłana przez wodnick »

valdoorf

  • Full Member
  • ***
  • Wiadomości: 111
  • Pomógł: 0
    • Zobacz profil
Odp: Problem z wydajnością Publikera
« Odpowiedź #5 dnia: 05 Listopad 2013, godz: 12:47 »
w pierwszej odpowiedzi źle odczytałem Twoją podpowiedź - sorry.

Natomiast skrypt powstał by dociążyć maszynę i szybciej wykonywać działania. Bez niego obciążenie było na poziomie 1%
Wykoncypowałem więc sobie ,że jak na 1% dodaje 100 wpisów to na 100% będzie ich wykładniczo więcej ;)

ale nie jest i to jest mój problem, bo może niepotrzebnie zarzynam proca. Ok Spróbuję rozdzielić wszystkie kolejki i obaczę co sie zmieniło. W każdym razie jeszcze raz dzięki

valdoorf

  • Full Member
  • ***
  • Wiadomości: 111
  • Pomógł: 0
    • Zobacz profil
Odp: Problem z wydajnością Publikera
« Odpowiedź #6 dnia: 06 Listopad 2013, godz: 09:13 »
@wodnick - dzięki za rady - trochę pomogło - dziś mam 2200 wpisów, ale to wciąż nie to samo co 11 000 a wiem, że Publiker tyle potrafił wycisnąć...

Masz może jeszcze jakieś rady ?
A może @Publiker.pl coś podpowie ? Jak zwiększyć optymalnie wydajność programu? Czy wywoływanie równolegle zadania cron jet optymalne ? Czy raczej zamula program ?
Jak więc go dopalić ?

Proszę o info dotyczące BHP programu tj:
- czy lepiej ustawić krótkie wywołania programu np. co 30 sekund na 28 sekund działania ?
- czy może dłuższe nap co minutę na 55 sekund (albo inny interwał czasowy)
- jak program obsługuje uruchomienie wielu wątków tej samej kolejki ?

Pytam, bo jak pisałem - gdy ustawiam zadania szeregowo, to zużycie proca jest na poziomie 1% albo niżej.
Kwestią istotną jest czy uruchamianie zadań równolegle tylko zamula program i grzeje niepotrzebnie proca czy też daje realne wyniki.

Tylko proszę o odpowiedzi z podstawą, a nie typu "zalecamy tak - patrz help na stronie ble, ble ble"
Bo szukam optymalnych ustawień dla wydajnej maszyny - 4 rdzenie 3.4 Ghz 32GB RAM a nie hostingu za 30 pln na rok.

publiker.pl

  • Administrator
  • Hero Member
  • *****
  • Wiadomości: 1 867
  • Pomógł: 0
    • Zobacz profil
Odp: Problem z wydajnością Publikera
« Odpowiedź #7 dnia: 06 Listopad 2013, godz: 14:36 »
Jak zwiększyć optymalnie wydajność programu? Czy wywoływanie równolegle zadania cron jet optymalne ? Czy raczej zamula program ?
Rozbicie zadań na kilka kolejek na pewno pomoże. Przeważnie rozbicie zadań na kilka kolejek zwiększa wydajność w stosunku do obciążenia serwera, więc warto to zrobić.

Proszę o info dotyczące BHP programu tj:
- czy lepiej ustawić krótkie wywołania programu np. co 30 sekund na 28 sekund działania ?
- czy może dłuższe nap co minutę na 55 sekund (albo inny interwał czasowy)
W przypadku tych dwóch opcji raczej nie powinno być wielkiej różnicy w wydajności, oba ustawianie są OK.

Pytam, bo jak pisałem - gdy ustawiam zadania szeregowo, to zużycie proca jest na poziomie 1% albo niżej.
Kwestią istotną jest czy uruchamianie zadań równolegle tylko zamula program i grzeje niepotrzebnie proca czy też daje realne wyniki.
Daje realne wyniki.

valdoorf

  • Full Member
  • ***
  • Wiadomości: 111
  • Pomógł: 0
    • Zobacz profil
Odp: Problem z wydajnością Publikera
« Odpowiedź #8 dnia: 07 Listopad 2013, godz: 09:50 »
wygląda na to, ze częściowo pomogło - dziś wysłał prawie 7000 wpisów, ale to wciąż nie to samo, co miałem kiedyś... pokombinuję z kolejkami, bo ciekawą kwestią jest stosunek kolejek planowania do wysyłania.

W każdym razie dzięki za pomoc

valdoorf

  • Full Member
  • ***
  • Wiadomości: 111
  • Pomógł: 0
    • Zobacz profil
Odp: Problem z wydajnością Publikera
« Odpowiedź #9 dnia: 08 Listopad 2013, godz: 09:19 »
Wydaje mi się, że warto byłoby wykonać mały tutorial sposobu wykonywania kolejek i ich proporcji.
Po kilku próbach udało mi się osiągnąć na dziś wynik 9500 wpisów.
Bazy tylko bezpłatne.

Ale wciąż pozostaje niedosyt, bo wydaje się, kiedyś bez kolejek Publiker był żwawszy.

Myślę, że to naprawdę istotne, bo to nie jest takie proste i widać po postach, że ludzie (nie tylko ja) mają z tym problem - choćby tu http://forum.publiker.pl/index.php/topic,1113.msg5830.html#msg5830

Bo podejrzewam, że problem nie leży w cachu, ale w konfiguracji zadań.

Może @wodnick lub inni "starzy wyjadacze" mogliby zasugerować optymalne konfiguracje ?
Komu udało się zrobić więcej niż 15 000 wpisów na dobę ? Ja z tego, co pamiętam miałem coś w okolicach 13 -14 000