Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
hej, mam mały problem, prawodpodobnie gdzieś w kodzie walnąłem bubla i na stronie gdzieś jest "luka" przez, którą można zajechać cały wirtualny rdzeń.
Jakich logów użyć aby nieco naprowadzić się na to gdzie ten błąd mozę być?
Offline
Logowanie szczegółowe do pliku w php.ini najprościej.
Najpierw zdecyduj z resztą, jak masz to PHP skonfigurowane, na jakim serwerze i przez jaki interfejs php.
Np dla php-fpm
php_admin_value[error_log] = /var/log/php/php70-magento.scripts.log
w konfigu demona fpm.conf
Ostatnio edytowany przez Jacekalex (2018-03-19 13:17:48)
Offline
php-fpm
php.ini:
http://wklej.org/hash/11f806bdd68/
W logach jedynie mam:
error.log:
[19-Mar-2018 13:15:09] NOTICE: fpm is running, pid 9706 [19-Mar-2018 13:15:09] NOTICE: ready to handle connections [19-Mar-2018 13:15:09] NOTICE: systemd monitor interval set to 10000ms [19-Mar-2018 13:15:52] WARNING: [pool www] server reached pm.max_children setting (4), consider raising it
serwer to vps z nazwa.pl ale strona generalnie działa spoko nawet przy 100 uzytkownikach, jednakze jeden chyba odkrył alo ktos robi to nieumyślnie jakąś wade w kodzie i wątki wariuja
Offline
[quote="http://wklej.org/hash/11f806bdd68/"]; Log errors to specified file. PHP's default behavior is to leave this value
; empty.
; http://php.net/error-log
; Example:
;[b]error_log = php_errors.log[/b]
; Log errors to syslog (Event Log on Windows).
;[b]error_log = syslog[/b][/quote]
W php.ini masz komentarze i sznurki do dokumentacji php.
I przy okazji pierdylion opcji dla logowania specyficznych modułów i intefejsów.
Ostatnio edytowany przez Jacekalex (2018-03-19 13:28:29)
Offline
wlaczylem je sobie:
php_admin_value[error_log] = /var/log/php7.0/www/error_log.pav.log
php_admin_flag[log_errors] = on
bezpośrednio w pliku konfiguracyjnym użytkownika php
czyli powinienem włączyć je takżę w php.ini żeby w ogole zaczeły działac?
Offline
Sam sprawdź, czy loguje.
Ja generalnie w pho.pini ustawiam tylko to, czego nie ustawiam w innych konfigach, bo w miarę aktualizacji php może mieszać paramentry z php.ini i np htaccess, czy php_value Nginxa, i traktować je dosyć przypadkowo.
Wolę w miarę możliwości nie dublować tych samych parametrów w różnych miejscach.
Offline
a czym w samej konfiguracji znalazłeś jakiś błąd lub niedopatrzenie? podsyłam jeszcze konfiguracje dla procesu php:
[www] user = www-data group = www-data listen = /run/php/php7.0-fpm-www.sock listen.owner = www-data listen.group = www-data php_admin_value[disable_functions] = exec,passthru,shell_exec,system php_admin_flag[allow_url_fopen] = on pm = dynamic pm.max_children = 4 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 chdir = / slowlog = /var/log/php7.0/www/slow2.log request_slowlog_timeout = 5s php_admin_value[error_log] = /var/log/php7.0/www/error_log.pav.log php_admin_flag[log_errors] = on
ten plik w ogole sie nie tworzy:
php_admin_value[error_log] = /var/log/php7.0/www/error_log.pav.log
Ostatnio edytowany przez Twige (2018-03-19 13:47:51)
Offline
Najkrótsze disable_functions jakie w życiu widziałem. ;)
ja mam takie:
passthru,shell_exec,system,show_source,eval,proc_open,popen,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,openlog,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
ten plik w ogole sie nie tworzy:
php_admin_value[error_log] = /var/log/php7.0/www/error_log.pav.log[/quote]
A czy w ogóle ma prawo się stworzyć? (uprawnienia)Ostatnio edytowany przez Jacekalex (2018-03-19 13:51:28)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
gdzie mogę poczytać więcej na ten temat? :)
Offline
[quote=Jacekalex]Najkrótsze disable_functions jakie w życiu widziałem. ;)
php_admin_value[error_log] = /var/log/php7.0/www/error_log.pav.log[/quote]
A czy w ogóle ma prawo się stworzyć? (uprawnienia)[/quote]
katalog php7.0 i wszystko pod nim ma wlaściciela www czyli użytkownika, który odpala proces php dla tej strony
Offline
PHP nie jest czasem obcięty apparmorem?
W logach demona nie ma info, dlaczego nie może tego pliku założyć?
Poza tym to obciążenie występuje od razu po włączeniu/restarcie php, czy jest wywoływane z zewnątrz - wywołaniem GET lub POST?
Co tam masz w ogóle za skrypty?
Może przez jakaś podatność w WP czy błąd w konfiguracji krasnoludki zrobiły Ci kopalnię Monero na VPSie?
To ostatnio jest dosyć modne.
PS:
Najmniejszy kurpdupel z VPSów Nazwy, wziąłem go do zabawy (procesy PHP i Nginx):
https://s10.postimg.org/kwb24rak9/VPS.png
i nawet jakoś chodzi.
Ostatnio edytowany przez Jacekalex (2018-03-19 14:16:05)
Offline
plik już się twrzy, niedopatrzyłem jednje rzeczy związanej wlasnie z upr
apparmoru nie uzywam
Obciążenie występuja na pewno z zewnątrz i wynika z kodu php - generalnie kiedy obiciążenie jest ogromne i wylacze a nastepnie wlacze php od razu wzrasta do 100%
teraz jest spokojnie ale za 30 minut znowu może być wrost do 100%, zauwazylem ze co jakis czas obciążenie wzrasta do 20 - 30% ale na sekunde i od razu opada
więc to musi byc kwestia php, a ja nie moge namierzyc przyczyny
slowlog pokazuje zaedwie:
[19-Mar-2018 13:13:38] [pool www] pid 9640 script_filename = /home/www/wp-cron.php [0x00007f0daa813bb0] curl_exec() /home/www/wp-includes/Requests/Transport/cURL.php:162 [0x00007f0daa813ae0] request() /home/www/wp-includes/class-requests.php:379 [0x00007f0daa8139d0] request() /home/www/wp-includes/class-http.php:371 [0x00007f0daa813830] request() /home/www/wp-includes/class-http.php:612 [0x00007f0daa813770] get() /home/www/wp-includes/http.php:170 [0x00007f0daa8136c0] wp_remote_get() /home/www/assets/plugins/wp-fastest-cache/wpFastestCache.php:1483 [0x00007f0daa813610] wpfc_remote_get() /home/www/assets/plugins/wp-fastest-cache/wpFastestCache.php:1433 [0x00007f0daa8133f0] create_preload_cache() /home/www/wp-includes/class-wp-hook.php:298 [0x00007f0daa813300] apply_filters() /home/www/wp-includes/class-wp-hook.php:323 [0x00007f0daa813280] do_action() /home/www/wp-includes/plugin.php:515 [0x00007f0daa8131a0] do_action_ref_array() /home/www/wp-cron.php:117
log fpm:
[19-Mar-2018 13:15:09] NOTICE: fpm is running, pid 9706 [19-Mar-2018 13:15:09] NOTICE: ready to handle connections [19-Mar-2018 13:15:09] NOTICE: systemd monitor interval set to 10000ms [19-Mar-2018 13:15:52] WARNING: [pool www] server reached pm.max_children setting (4), consider raising it [19-Mar-2018 13:22:15] NOTICE: Terminating ... [19-Mar-2018 13:22:15] NOTICE: exiting, bye-bye! [19-Mar-2018 13:22:15] NOTICE: fpm is running, pid 9780 [19-Mar-2018 13:22:15] NOTICE: ready to handle connections [19-Mar-2018 13:22:15] NOTICE: systemd monitor interval set to 10000ms [19-Mar-2018 13:29:02] NOTICE: Terminating ... [19-Mar-2018 13:29:02] NOTICE: exiting, bye-bye! [19-Mar-2018 13:29:02] NOTICE: fpm is running, pid 9849 [19-Mar-2018 13:29:02] NOTICE: ready to handle connections [19-Mar-2018 13:29:02] NOTICE: systemd monitor interval set to 10000ms [19-Mar-2018 13:37:30] NOTICE: Terminating ... [19-Mar-2018 13:37:30] NOTICE: exiting, bye-bye! [19-Mar-2018 13:37:30] NOTICE: fpm is running, pid 9912 [19-Mar-2018 13:37:30] NOTICE: ready to handle connections [19-Mar-2018 13:37:30] NOTICE: systemd monitor interval set to 10000ms [19-Mar-2018 13:41:46] NOTICE: Terminating ... [19-Mar-2018 13:41:46] NOTICE: exiting, bye-bye! [19-Mar-2018 13:41:47] NOTICE: fpm is running, pid 9989 [19-Mar-2018 13:41:47] NOTICE: ready to handle connections [19-Mar-2018 13:41:47] NOTICE: systemd monitor interval set to 10000ms [19-Mar-2018 13:42:08] NOTICE: Terminating ... [19-Mar-2018 13:42:08] NOTICE: exiting, bye-bye! [19-Mar-2018 13:42:08] NOTICE: fpm is running, pid 10016 [19-Mar-2018 13:42:08] NOTICE: ready to handle connections [19-Mar-2018 13:42:08] NOTICE: systemd monitor interval set to 10000ms [19-Mar-2018 13:50:46] WARNING: [pool www] server reached pm.max_children setting (4), consider raising it [19-Mar-2018 13:52:33] NOTICE: Terminating ... [19-Mar-2018 13:52:33] NOTICE: exiting, bye-bye! [19-Mar-2018 13:52:33] NOTICE: fpm is running, pid 10075 [19-Mar-2018 13:52:33] NOTICE: ready to handle connections [19-Mar-2018 13:52:33] NOTICE: systemd monitor interval set to 10000ms [19-Mar-2018 14:00:43] NOTICE: Terminating ... [19-Mar-2018 14:00:43] NOTICE: exiting, bye-bye! [19-Mar-2018 14:00:43] NOTICE: fpm is running, pid 10152 [19-Mar-2018 14:00:43] NOTICE: ready to handle connections [19-Mar-2018 14:00:43] NOTICE: systemd monitor interval set to 10000ms
error_log:
[19-Mar-2018 13:00:18 UTC] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /home/www/wp-includes/meta.php on line 841 [19-Mar-2018 13:00:51 UTC] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /home/www/wp-includes/meta.php on line 841 [19-Mar-2018 13:01:59 UTC] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /home/www/wp-includes/meta.php on line 841 [19-Mar-2018 13:08:43 UTC] PHP Warning: Invalid argument supplied for foreach() in /home/www/assets/back/single.php on line 25
///////////
kopalnia monero na pewno nie, jestem w 100% przekonany że to kwestia błędu w php
Ostatnio edytowany przez Twige (2018-03-19 14:12:43)
Offline
Która to wersja WP?
open_basedir dla WP ustawiłeś?
[19-Mar-2018 13:08:43 UTC] PHP Warning: Invalid argument supplied for foreach() in /home/www/assets/back/single.php on line 25
Co to w ogóle jest?
[19-Mar-2018 13:00:18 UTC] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /home/www/wp-includes/meta.php on line 841
Tutaj brakuje pamięci, zwiększ mu memory_limit np do 256M
Ostatnio edytowany przez Jacekalex (2018-03-19 14:27:15)
Offline
ten blad z foreach juz naprawilem ale to byla kwestia tylko warunku, nie milo to przekładu na to ze cpu jest zarzynane
open_basedir - ustawione w vHoście php cgi :
fastcgi_param PHP_VALUE open_basedir="/home/www";
nie bardzo wiem czy to poprawne
pamięć zwiększona ale to tez nie mialo przekladu na cpu
na wszelki zalcze konfiguracje vHosta:
server { server_name domena.pl; listen 80; access_log /var/log/nginx/htpcguides.com.access.log; error_log /var/log/nginx/htpcguides.com.error.log error; root /home/www; # Add index.php to the list if you are using PHP index index.php; location / { try_files $uri $uri/ /index.php?$args; limit_req zone=mylimit; } # Cache static files for as long as possible location ~*.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|cur)$ { expires max; log_not_found off; access_log off; } # Deny public access to wp-config.php location ~* wp-config.php { deny all; } location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_pass unix:/run/php/php7.0-fpm-www.sock; fastcgi_param PHP_VALUE open_basedir="/home/www"; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
Ostatnio edytowany przez Twige (2018-03-19 14:47:17)
Offline
Ja w Nginxie mam globalnie ustawione:
fastcgi_param PHP_ADMIN_VALUE open_basedir=$document_root:/tmp/php:/var/log/php;
i jako tako chodzi.
Obecnie np WP-4.9.2
Offline
nic to kompletnie nie daje, php zażynana cpu
odkrylem jednak żę kiedy odetne dostęp do katalogu wp-includes poprzez zmiane nazwy to automatycznie jest spokój - tak wiem że wtedy na stronie wywala bład i to dlatego ale kiedy odcinam dostęp do samego katalogu z motywem cpu nadal 100%, czy to moze byc jakas luka wp?
kiedy strona jest wylaczona, sam ngnix zjada około 40% cpu na dwóch procesach
////
wyglada to troche tak jakby ktos odpalił automatyczne odświeżanie co chwile albo puścił apache bench na mój serwis.
moze powiniene pomyśleć o jakichś limitach?
póki co mam ustawione limit requestów i połączeń ustawiony w ten sposób:
limit_req_zone $binary_remote_addr zone=mylimit:5m rate=24r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
Następnie w vHot dopisane do location /
location / { try_files $uri $uri/ /index.php?$args; limit_req zone=mylimit; limit_conn addr 10; }
Ostatnio edytowany przez Twige (2018-03-19 15:32:09)
Offline
Już wiem co sie dzieje
wystarczy na 5 kartach odpalic auto refresh co sekunde i serwer wysadzony, wiec apache benchmark to bardzo prawdopodobna przyczyna
pytanie teraz w jaki sposób można ustawić limity, które rzeczywiscie coś dadzą, jakieś podpowiedzi? :)
Offline
iptables -j SYNPROXY --help
W php sensownie skonfigurować [url=http://devboard.pl/opcache-czyli-nowosci-w-php-5-5-8][b]opcache[/b][/url].
Do tego w Nginxie też masz kilka rodzajów [url=https://www.google.pl/search?q=nginx+mod+limit][b]limitów[/b][/url].
Ostatnio edytowany przez Jacekalex (2018-03-19 17:40:11)
Offline
Te limity dla nginx nic nie daja, opcache włączone, tez nic nie daje...
w przeglądarce błąd : 503 Service Temporarily Unavailable
Ostatnio edytowany przez Twige (2018-03-19 22:17:29)
Offline
Serwery i usługi mają coś takiego jak logi.
Jeśli np Nginx zwraca 502, to w logu napisał pewnie, co go boli.
Np SYNPROXY w akcji:
ab -n 1000 -c25 https://domena.tld/ This is ApacheBench, Version 2.3 <$Revision: 1796539 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking doemena.tld (be patient) apr_pollset_poll: The timeout specified has expired (70007)
WP na adresie domena.tld chodzi, serwer żadnych wielkich obciążeń nie zanotował, podczas gdy Twój by chyba zawału dostał.
xD
SOA#1
Ostatnio edytowany przez Jacekalex (2018-03-19 21:59:18)
Offline
no bardzo mozliwe ze co takiego mialoby miejsce...
możesz mi podesłać jakieś materiały na temat synproxy ? bo limity nginx nie daja kompletnie nic, moge ustawic limit 10 połączeń dla jednego adresu IP, a netstat i tak pokazuje coś zupełnie innego
location / { try_files $uri $uri/ /index.php?$args; limit_req zone=mylimit; limit_conn addr 10; }
/////////////////////
przykład:
netstat -ant | egrep '(:80|:443) .*:.*ESTABLISHED' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c
wyrzuca mi że jedne z adresów połączony jest:
101 103.76.14.107
mimo nałożone limitu w nginx jest przepuszczany, co robie źle? :O
Ostatnio edytowany przez Twige (2018-03-19 22:32:52)
Offline
https://lwn.net/Articles/563151/
https://forum.dug.net.pl/viewtopic.php?id=27835
Ja np ustawiam tak:
iptables -t raw -A PREROUTING ! -i lo -p tcp -m multiport --dports 80,443 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j NOTRACK iptables -A INPUT ! -i lo -p tcp -m multiport --dports 80,443 -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1480 --ecn iptables -A OUTPUT -p tcp -m multiport --sports 80,443 -j ACCEPT
EDIT:
netstat -ant | egrep '(:80|:443) .*:.*ESTABLISHED' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c
wyrzuca mi że jedne z adresów połączony jest:
101 103.76.14.107[/quote]
Co to za lamerstwo?
[b]cat /usr/local/bin/dport[/b]Kod:
#!/bin/bash declare ADRES=$( ifconfig eth0 | egrep 'inet ' |awk '{print $2}'); sleep 1; echo "Moje IP to $ADRES"; /usr/sbin/iptstate -f -d "$ADRES"; exit 0;[b] cat /usr/local/bin/sport[/b]
Kod:
#!/bin/bash declare ADRES=$( ifconfig eth0 | egrep 'inet ' |awk '{print $2}'); sleep 1; echo "Moje IP to $ADRES"; /usr/sbin/iptstate -f -s ${ADRES}; exit 0;Instalujesz [b]iptstate[/b] i wio.
To by było na tyleOstatnio edytowany przez Jacekalex (2018-03-19 22:55:10)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
Dziękuje za odpowiedź, jesteś w stanie po krótce objaśnić mi jakie konkretnie informacje przedstawianją wyniki z iptstate?
Wyczytałem w internecie że porgram ten służy do sprawdzania ruchu sieciowego w czasie rzeczywistym - https://security.archlinux.org/package/iptstate
Z tego co zrozumiałem czytając help argument -d pokazuje połączenia, które kończą się danym adresie czyli w tym przypadku u mnie : " [i] Czyli w ten sposób mogę sprawdzać kto konkretnie i z jakiego portu oraz na jaki port się ze mną łączy? [/i]"
Natomiast argument -s pokazuje połączenia, które wychodzą z danego adresu czyli w tym wypadku ode mnie : Czy dobrze to rozumiem?
Pytanie tylko dlaczego widzę tutaj większość połączeń z mojego serwera na mój serwer tylko miedzy portami np 60112 a 80?
80 to port serwera www - wiadomo ale o co chodzi z tym połączeniem?
Nie rozumiem też dlaczego mają w konfiguracji nginx'a ustawiony limit połączeń na jeden adres ip jako 2 a ipstate tak jak netstat pokazuje mi że z jednego adresu ip jest więcej ni 2 połączenia z moim serwerem na porcie 80.
//
btw czemu netstat to lamerstwo? narzędzie już za stare i przeszło do lamusa?
Ostatnio edytowany przez Twige (2018-03-22 16:28:55)
Offline
Netstat nie jest przestarzały, ale służy raczej do pojedynczego sprawdzania, a nie podglądu na żywo połączeń.
Co się tyczy iptstate, to
man iptstate
zawiera wyjaśnienie,
a moje skrypty [b]sport[/b] i [b]dport[/b] pokazują po prostu co przylazło do serwera ([b]dport[/b]),
lub co wylazło z serwera ([b]sport[/b]).
Ostatnio edytowany przez Jacekalex (2018-03-22 17:32:06)
Offline
Rozumiem, a móglbyś się jeszcze odnieść do tych limitów w nginx?
Dlaczego dzieje się tak że mając ustawiony limit połączeń dla adresu IP na dwa w wynikach Twojego skryptu widze ich więcej?
Offline
Time (s) | Query |
---|---|
0.00012 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00095 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.145.81.252' WHERE u.id=1 |
0.00066 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.145.81.252', 1732252143) |
0.00040 | SELECT * FROM punbb_online WHERE logged<1732251843 |
0.00054 | SELECT topic_id FROM punbb_posts WHERE id=318519 |
0.00005 | SELECT id FROM punbb_posts WHERE topic_id=30368 ORDER BY posted |
0.00052 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30368 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00208 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30368 ORDER BY p.id LIMIT 0,25 |
0.00091 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30368 |
Total query time: 0.00632 s |