MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Dlaczego MongoDB nie odpowiada podczas testu obciążenia?

Naprawiono to:

sudo sysctl net.ipv4.tcp_tw_reuse=1

Następnie uruchom ponownie Mongo.

Alternatywnie możesz dodać go do /etc/sysctl.conf (aby był uruchamiany przy ponownym uruchomieniu):

net.ipv4.tcp_tw_reuse=1

Następnie uruchom to, aby ponownie załadować (bez konieczności ponownego uruchamiania)

sudo sysctl -p /etc/sysctl.conf

Ta „poprawka” wyłączy stan timewait dla gniazd TCP (w całym serwerze). Więc tak naprawdę to wcale nie jest poprawka. Jednak dopóki mongo nie zmniejszy swojego stanu timewait za pomocą SO_LINGER, duża liczba gniazd serwera będzie łączyć się w stanie TIME_WAIT i pozostanie bezużyteczna dla nowych połączeń. Możesz zobaczyć liczbę połączeń w TIME_WAIT:

netstat -an | grep TIME_WAIT | wc -l

Dzięki temu mogłem zobaczyć, że nie działa przy około 28 tysiącach połączeń TIME_WAIT. Używając tej flagi jądra:

sysctl net.ipv4.ip_local_port_range="18000 65535"

Serwer nie działa przy 45k połączeń. Tak więc, aby łatwiej odtworzyć błąd, możesz obniżyć zakres do 200 lub czegoś małego.

Tak więc wynik tego był w końcu pytanie dotyczące programowania (jak widać z ostatniego linku):

opcja TCP SO_LINGER (zero ) - kiedy jest to wymagane

http://alas.matf.bg.ac.rs /manuals/lspe/snode=105.html



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak mogę uzyskać wszystkie identyfikatory dokumentów w MongoDB?

  2. 3 proste kroki, aby poprawić bezpieczeństwo instalacji MongoDB

  3. śledź usunięte dokumenty w ograniczonej kolekcji Mongo DB

  4. Zapowiedź ClusterControl 1.7.1:wsparcie dla PostgreSQL 11 i MongoDB 4.0, ulepszone monitorowanie

  5. „Pole wymagało fasoli, której nie można było znaleźć”. błąd wiosennego spokojnego interfejsu API przy użyciu mongodb