Forum » Programiranje » PyMongo | connect/disconnect delay debug
PyMongo | connect/disconnect delay debug
HotBurek ::
Pozdravljeni.
Evo, sledeč problem. Iz svojega PC računalnika naredim SSH tunel na strežnik (ssh -L 27017:127.0.0.1:27017 -N user1@1.2.3.4) in poženem Python kodo. Le-ta se poveže na MongoDB (connect in disconnect), ter izpiše potreben čas za connect in disconnect skupaj. V log fajlu (/var/log/mongodb/mongod.log) se beleži "received"/"connection accepted"/"end connection".
In če to kodo poženem lokalno na mojem PC-ju + SSH tunel, načeloma dobim response nazaj po 10~20ms. Redkokdaj ~500ms. Vsaj tako pravi mongodb log file.
Ironično, ravno obratno pa je, če to isto kodo poženem direktno na severju. Tam je pa kar konstanta, da se v logu zabeleži 500ms, zelo redko ~5ms.
Sedaj mi ja malo zmankalo idej, kako naj to debugiram naprej. OS je isti, Python interpreter je isti, PyMogno je isti.
Skratka, problem je, da ta koda lokalno na strežniku potrebuje 500ms, da se izvede, remote preko SSH tunela pa 20ms.
Kako pridit do tega, da bo MongoDB naredil response v ~20ms tudi lokalno? In to čim bolj konstantno.
Iz spodnje kode; diff vedno vrača nekje 2-3 milisekunde, neglede na to, kej se ga požene.
Iz spodnje slike;
- modra prikazuje rezultat, ko se koda izvede na PC-ju in gre na strežnik preko SSH tunela (672 - 685 = 13ms)
- rdeča pa, ko se koda izvede direktno na serverju (957 - 479 = 522ms).
Evo, sledeč problem. Iz svojega PC računalnika naredim SSH tunel na strežnik (ssh -L 27017:127.0.0.1:27017 -N user1@1.2.3.4) in poženem Python kodo. Le-ta se poveže na MongoDB (connect in disconnect), ter izpiše potreben čas za connect in disconnect skupaj. V log fajlu (/var/log/mongodb/mongod.log) se beleži "received"/"connection accepted"/"end connection".
In če to kodo poženem lokalno na mojem PC-ju + SSH tunel, načeloma dobim response nazaj po 10~20ms. Redkokdaj ~500ms. Vsaj tako pravi mongodb log file.
Ironično, ravno obratno pa je, če to isto kodo poženem direktno na severju. Tam je pa kar konstanta, da se v logu zabeleži 500ms, zelo redko ~5ms.
Sedaj mi ja malo zmankalo idej, kako naj to debugiram naprej. OS je isti, Python interpreter je isti, PyMogno je isti.
Skratka, problem je, da ta koda lokalno na strežniku potrebuje 500ms, da se izvede, remote preko SSH tunela pa 20ms.
Kako pridit do tega, da bo MongoDB naredil response v ~20ms tudi lokalno? In to čim bolj konstantno.
Iz spodnje kode; diff vedno vrača nekje 2-3 milisekunde, neglede na to, kej se ga požene.
#!/usr/bin/python3.7 import datetime; import pymongo; start = datetime.datetime.now(); mongoClient = pymongo.MongoClient(host="127.0.0.1", port=27017); # mongoClient = pymongo.MongoClient("mongodb://127.0.0.1:27017"); mongoClient.close(); end = datetime.datetime.now(); diff = (end - start); print(diff); print("microseconds=" + str(diff.microseconds)); print("miliseconds=" + str(round(diff.microseconds / 1000)));
Iz spodnje slike;
- modra prikazuje rezultat, ko se koda izvede na PC-ju in gre na strežnik preko SSH tunela (672 - 685 = 13ms)
- rdeča pa, ko se koda izvede direktno na serverju (957 - 479 = 522ms).
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
- spremenilo: HotBurek ()
HotBurek ::
Evo, našel rešitev.
Gre za dva fajla:
/usr/lib/python3/dist-packages/pymongo/mongo_client.py
line=579
min_interval=0.5
ter
/usr/lib/python3/dist-packages/pymongo/common.py
line=73
MIN_HEARTBEAT_INTERVAL = 0.5
Oboje sem spremenil iz 0.5 na 0.05 in dela k šus.
Vir: https://stackoverflow.com/questions/528...
Gre za dva fajla:
/usr/lib/python3/dist-packages/pymongo/mongo_client.py
line=579
min_interval=0.5
ter
/usr/lib/python3/dist-packages/pymongo/common.py
line=73
MIN_HEARTBEAT_INTERVAL = 0.5
Oboje sem spremenil iz 0.5 na 0.05 in dela k šus.
Vir: https://stackoverflow.com/questions/528...
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Skripta za Bolho.Oddelek: Programiranje | 4438 (1850) | planina91 |
» | Spletno gostovanje za več manjših projektovOddelek: Izdelava spletišč | 889 (690) | bluefish |
» | Postavitev mySQLOddelek: Programiranje | 2232 (1810) | M01O |
» | [Python3] Izvajanje ukazov po določenem časuOddelek: Programiranje | 1447 (1057) | noraguta |
» | Framework za web in WebSocketOddelek: Programiranje | 1505 (1310) | usoban |