Страница 1 из 1

тестирование скорости загрузки www

Добавлено: 2009-11-16 18:43:04
HEDG_SS
Замечено, что в последнее время пользователи жалуются на "долгую загрузку страничек".
При этом сервера не загружены (CPU до 50%, Озу тоже хватает свободной, сетевушки Intel Desktop 1000MT - загрузка до 200Мб. Канала интернета достаточно , даже в пике есть запас 5-10 % от общей полосы, а обычно минимум 20-25%)
Т.е. Очень похоже, что все же есть где-то "узкое место". Очень хочется его вычислить.

Юзал ping, dig, mtr, dnsperf, top, systat, vmstat, логи. Вроде все нормально, но проблема остается :unknown: .
Единственное, что было найдено на серваке с НАТ

Код: Выделить всё

...
Limiting icmp ping response from 511 to 500 packets/sec
...
Также было замечено, что иногда пропадают первые 2-3 пакета при трассировке.

Есть ли утилиты позволяющие провести "комплексное" тестирование, т.е. тестирование всех составляющих при запросе странички (dns, пинги и другие объективные параметры)?

Может есть еще какие-то утилиты или методики,позволяющие выявить "узкие места" :st: :st:

Re: тестирование скорости загрузки www

Добавлено: 2009-11-16 19:35:05
HEDG_SS
Как такое может быть???

Код: Выделить всё

# ping x.x.x.x
PING x.x.x.x (x.x.x.x): 56 data bytes
ping: sendto: Operation not permitted
ping: sendto: Operation not permitted
ping: sendto: Operation not permitted
ping: sendto: Operation not permitted
ping: sendto: Operation not permitted
ping: sendto: Operation not permitted
64 bytes from x.x.x.x: icmp_seq=6 ttl=128 time=0.183 ms
Это на компе с НАТ .Натом занимается PF на FreeBSD 7.0 .Заменил правило по умолчанию с "блокировать все левое" , "на разрешить все".

Код: Выделить всё

# pfctl -sr
scrub in all fragment reassemble
block drop quick from <bad_net> to any
block drop quick from any to <bad_net>
block drop log quick proto tcp from ! <good_ssh> to <me> port = ssh
block drop in quick on net0 inet from any to 255.255.255.255
block drop in quick on net1 proto tcp from <spamers_tmp> to any port = smtp
block drop in quick on net1 proto tcp from <spamers> to any port = smtp
pass in quick on net1 proto tcp from <local_net> to any port = smtp flags S/SA keep state (source-track rule, max-src-conn 15, max-src-conn-rate 20/60, overload <spamers_tmp> flush global, src.track 60)
pass out quick on net1 inet proto tcp from <real_ip> to <local_net> flags S/SA keep state
pass in quick on net1 inet proto tcp from <local_net> to any flags S/SA keep state
pass out quick on net0 inet proto tcp from <real_ip> to any flags S/SA keep state
pass in quick on net0 inet proto tcp from any to <local_net> flags S/SA keep state
pass out quick on net1 inet proto tcp from any to <local_net> flags S/SA keep state
pass out quick on net1 inet proto tcp from <real_ip> to <local_net> flags S/SA keep state
pass out quick on net1 inet proto udp from <real_ip> to <local_net> keep state
pass in quick on net1 inet proto udp from <local_net> to any keep state
pass out quick on net0 inet proto udp from <real_ip> to any keep state
pass in quick on net0 inet proto udp from any to <local_net> keep state
pass out quick on net1 inet proto udp from any to <local_net> keep state
pass out quick on net1 inet proto icmp from <real_ip> to <local_net> keep state
pass in quick on net1 inet proto icmp from <local_net> to any keep state
pass out quick on net0 inet proto icmp from <real_ip> to any keep state
pass in quick on net0 inet proto icmp from any to <local_net> keep state
pass out quick on net1 inet proto icmp from any to <local_net> keep state
pass out quick on net1 inet proto gre from <real_ip> to <local_net> keep state
pass in quick on net1 inet proto gre from <local_net> to any keep state
pass out quick on net0 inet proto gre from <real_ip> to any keep state
pass in quick on net0 inet proto gre from any to <local_net> keep state
pass out quick on net1 inet proto gre from any to <local_net> keep state
pass out quick on net1 inet proto esp from <real_ip> to <local_net> keep state
pass in quick on net1 inet proto esp from <local_net> to any keep state
pass out quick on net0 inet proto esp from <real_ip> to any keep state
pass in quick on net0 inet proto esp from any to <local_net> keep state
pass out quick on net1 inet proto esp from any to <local_net> keep state
pass quick inet proto tcp from <me> to any flags S/SA keep state
pass quick on net0 inet proto udp from <me> to any port = domain keep state
pass quick on net0 inet proto udp from <me> to any port = ntp keep state
pass quick on net0 inet proto udp from any port = domain to <me> keep state
pass quick on net0 inet proto udp from any port = ntp to <me> keep state
pass quick on net0 inet proto icmp from <me> to any keep state
pass quick inet proto tcp from <servers> to any flags S/SA keep state
pass quick inet proto udp from <servers> to any keep state
pass quick inet proto icmp from <servers> to any keep state
pass all flags S/SA keep state

Re: тестирование скорости загрузки www

Добавлено: 2009-11-17 6:04:44
gloom

Код: Выделить всё

Limiting icmp ping response from 511 to 500 packets/sec
ето срабатывает защита от icmp флуда
как только срабытывает начинает дропать icmp
то-есть ни пинги ни трасировка вообще ничего работать не будет

Re: тестирование скорости загрузки www

Добавлено: 2009-11-17 11:45:22
schizoid
трассировка вообще то может и по UDP работать...

Re: тестирование скорости загрузки www

Добавлено: 2009-11-17 12:10:54
HEDG_SS
В каких случаях срабатывает защита?
1. Много входящих icmp запросов к роутеру
2. Много icmp запросов не к роутеру, но проходящих через него.
3. может еще в каких то...

Если срабатывает защита, по идее исходящие от роутера запросы блочиться не должны :unknown: ?

Re: тестирование скорости загрузки www

Добавлено: 2009-11-17 22:15:52
armadex
попробуйте увеличить в sysctl

Код: Выделить всё

net.inet.icmp.icmplim
нужно тюнить sysctl, и все равно пользователи в часы пик будут жаловатся, ибо сидят они обычно на сайтах аля вконтакте, и на их сервера нагрузка неплохая, а каналы ведь не резиновые

Re: тестирование скорости загрузки www

Добавлено: 2009-11-18 17:45:07
HEDG_SS
Чтоб не было ругани на лимиты, выставил

Код: Выделить всё

net.inet.icmp.icmplim=500 #число ICMP "Unreachable" и TCP RST пакетов в секунду
net.inet.icmp.icmplim_output=0 
Я так понимаю, что выставлять слишком большой порог для icmp не стоит, а чтоб эта ругань не мозолила глаза, отключил ее вторым параметром.

Re: тестирование скорости загрузки www

Добавлено: 2009-11-20 15:10:06
HEDG_SS
Поковырялся и нашел причину

Код: Выделить всё

ping: sendto: Operation not permitted
Есть таблица

Код: Выделить всё

table <me> const { self }
Почему-то она не существовала, перегрузил таблицы - появилось

Поковырял еще...
Похоже проблема кроется в серваке, занимающегося НАТом
Поменял режим логирования в PF
Полетели такие ошибки

Код: Выделить всё

pf: BAD state: TCP 93.84.8.53:15124 93.84.8.53:15124 172.17.5.3:33000 [lo=1552665248 high=1552677111 win=65535 modulator=0 wscale=0] [lo=505166590 high=505223725 win=187 modulator=0 wscale=6] 4:4 R seq=505166590 (505158190) ack=1552665248 len=0 ackskew=0 pkts=23:30 dir=in,rev
pf: State failure on:         |
pf: BAD state: TCP 172.17.5.3:48243 91.202.110.26:48243 94.181.56.228:11347 [lo=2213323263 high=2213388412 win=125 modulator=0 wscale=6] [lo=2941302224 high=2941310145 win=65535 modulator=0 wscale=0] 7:4 R seq=2941302224 (2941302145) ack=2213323263 len=0 ackskew=0 pkts=22:28 dir=in,rev
pf: State failure on:         |
pf: BAD state: TCP 95.83.7.169:51906 95.83.7.169:51906 172.16.20.8:45148 [lo=3421306011 high=3421362978 win=188 modulator=0 wscale=6] [lo=3706509381 high=3706521222 win=65535 modulator=0 wscale=0] 4:4 R seq=3421306011 (3421297443) ack=3706509381 len=0 ackskew=0 pkts=48:23 dir=in,fwd
pf: State failure on:         |
pf_normalize_ip: reass frag 62077 @ 0-1480
pf_normalize_ip: reass frag 62333 @ 0-1480
pf_normalize_ip: reass frag 62589 @ 0-1480
pf_normalize_ip: reass frag 62845 @ 0-1480
pf: BAD state: TCP 188.40.80.215:80 188.40.80.215:80 172.16.18.17:4780 [lo=2276641309 high=2276641310 win=16384 modulator=0] [lo=0 high=16384 win=1 modulator=0] 2:0 S seq=2283287732 (2283287732) ack=0 len=0 ackskew=0 pkts=3:0 dir=in,fwd
pf: State failure on: 1       | 5
pf: BAD state: TCP 188.40.80.215:80 188.40.80.215:80 172.16.18.17:4754 [lo=236511761 high=236511762 win=16384 modulator=0] [lo=0 high=16384 win=1 modulator=0] 2:0 S seq=243212291 (243212291) ack=0 len=0 ackskew=0 pkts=3:0 dir=in,fwd
pf: State failure on: 1       | 5
pf: BAD state: TCP 188.40.80.215:80 188.40.80.215:80 172.16.18.17:4763 [lo=2976507107 high=2976507109 win=16384 modulator=0] [lo=0 high=1 win=1 modulator=0] 2:0 S seq=2983045039 (2983045039) ack=0 len=0 ackskew=0 pkts=1:0 dir=in,fwd
pf: State failure on: 1       | 5
pf: BAD state: TCP 77.91.227.86:80 77.91.227.86:80 172.16.18.17:4030 [lo=959969026 high=959969027 win=65535 modulator=0] [lo=0 high=65535 win=1 modulator=0] 2:0 S seq=966668010 (966668010) ack=0 len=0 ackskew=0 pkts=3:0 dir=in,fwd
pf: State failure on: 1       | 5
pf: BAD state: TCP 188.40.80.215:80 188.40.80.215:80 172.16.18.17:4756 [lo=1474809986 high=1474809987 win=16384 modulator=0] [lo=0 high=16384 win=1 modulator=0] 2:0 S seq=1481463010 (1481463010) ack=0 len=0 ackskew=0 pkts=3:0 dir=in,fwd
pf: State failure on: 1       | 5
pf: BAD state: TCP 188.40.80.215:80 188.40.80.215:80 172.16.18.17:4777 [lo=10787358 high=10787359 win=16384 modulator=0] [lo=0 high=16384 win=1 modulator=0] 2:0 S seq=17479596 (17479596) ack=0 len=0 ackskew=0 pkts=3:0 dir=in,fwd
pf: State failure on: 1       | 5
pf: BAD state: TCP 188.40.80.215:80 188.40.80.215:80 172.16.18.17:4759 [lo=3530147841 high=3530147842 win=16384 modulator=0] [lo=0 high=16384 win=1 modulator=0] 2:0 S seq=3536869327 (3536869327) ack=0 len=0 ackskew=0 pkts=3:0 dir=in,fwd
pf: State failure on: 1       | 5
pf_normalize_ip: reass frag 65283 @ 1456-2609
pf_reassemble: 2609 < 2609?
pf_reassemble: complete: 0xcb95b200(2629)
pf_normalize_ip: reass frag 3198 @ 0-1480
В статистика с pflog0 мелькает такое

Код: Выделить всё

13:57:06.378624 IP 213.21.24.185.2435 > x.x.x.x.12354:  tcp 24 [bad hdr length 4 - too short, < 20]
13:57:06.381860 IP 95.135.9.42.24344 > x.x.x.x.35691:  tcp 24 [bad hdr length 4 - too short, < 20]
13:57:06.391429 IP 91.124.18.239.3678 > x.x.x.x.61962:  tcp 24 [bad hdr length 4 - too short, < 20]
13:57:06.391476 IP 90.151.85.24.4965 > x.x.x.x.25476:  tcp 24 [bad hdr length 4 - too short, < 20]
Вот данные по PF

Код: Выделить всё

INFO:
Status: Enabled for 80 days 11:28:57            Debug: Misc

State Table                          Total             Rate
  current entries                    94903
  searches                    502989308756        72337.8/s
  inserts                       6888878339          990.7/s
  removals                      6888783436          990.7/s
Counters
  match                        11750416097         1689.9/s
  bad-offset                             0            0.0/s
  fragment                          115678            0.0/s
  short                              21616            0.0/s
  normalize                          92830            0.0/s
  memory                         595958490           85.7/s
  bad-timestamp                          0            0.0/s
  congestion                             0            0.0/s
  ip-option                          32896            0.0/s
  proto-cksum                      5200114            0.7/s
  state-mismatch                 126094754           18.1/s
  state-insert                        9925            0.0/s
  state-limit                            0            0.0/s
  src-limit                             34            0.0/s
  synproxy                               0            0.0/s

TIMEOUTS:
tcp.first                   120s
tcp.opening                  30s
tcp.established           86400s
tcp.closing                 900s
tcp.finwait                  45s
tcp.closed                   90s
tcp.tsdiff                   30s
udp.first                    60s
udp.single                   30s
udp.multiple                 60s
icmp.first                   20s
icmp.error                   10s
other.first                  60s
other.single                 30s
other.multiple               60s
frag                         30s
interval                     10s
adaptive.start            60000 states
adaptive.end             120000 states
src.track                     0s

LIMITS:
states        hard limit   100000
src-nodes     hard limit   100000
frags         hard limit    20000
tables        hard limit     1000
table-entries hard limit   200000
Ошибок на интерфейсах нет (смотрел неоднократно)

Код: Выделить всё

# netstat -dw1
            input        (Total)           output
   packets  errs      bytes    packets  errs      bytes colls drops
     34436     0   24690054      34426     0   24632567     0     0
     36394     0   26138623      36379     0   26064892     0     0
     36875     0   26485549      36867     0   26426319     0     0
В пике загрузка до 80к

Опции в PF

Код: Выделить всё

##########   Options:   ############
set skip on lo0
set block-policy drop
set limit src-nodes 100000
set limit states 100000
set limit frags 20000
set debug misc
#set debug urgent
##############
set optimization normal
set require-order yes # требовать соблюдения очередности в pf.conf

scrub in all fragment reassemble
scrub in all no-df
Подскажите, что можно еще проверить и сделать для устранения проблемы :st: ?

Re: тестирование скорости загрузки www

Добавлено: 2009-11-21 15:50:26
Arch
надо наверно попробовать карточки поменять, бьюцца пакетики

Код: Выделить всё

13:57:06.391476 IP 90.151.85.24.4965 > x.x.x.x.25476:  tcp 24 [bad hdr length 4 - too short, < 20]
у меня такая фигня была, тоже не мог поверить что 3com за 100 баксов такое может :)

Re: тестирование скорости загрузки www

Добавлено: 2009-11-23 10:55:33
HEDG_SS
Спасибо!
Я тоже пришел к выводу, что либо свич гонит (хотя вроде не должен, не нагрузка это для него) или сетевушка умирает.
Жду железа на замену, для тестирования.

Re: тестирование скорости загрузки www

Добавлено: 2009-11-26 11:23:01
HEDG_SS
Отключил нормализацию в PF, убрал опцию

Код: Выделить всё

scrub in all no-df
Перестали вываливаться соединения, поднятия пингов стали более умеренные.

Почему может так себя вести нормализация ?
Как записать правило на PF антологично, как в ipfw

Код: Выделить всё

deny ip from any to any frag
Надо блокировать все виды фрагментов - 1-й, последующие и последний.

Что еще можно покрутить на тему опций в PF?