🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
3 messages
3 total messages Started by Paweł Mon, 20 Jan 2014 19:56
non-blocking snmp
#52568
Author: Paweł
Date: Mon, 20 Jan 2014 19:56
46 lines
2056 bytes
piszę skrypt odpytujący po SNMP kilka tysięcy hostów. używam biblioteki
net-snmp-perl, sesje snmp puszczam w trybie non-blocking. wszystko
działa pięknie ale chciałbym ograniczyć liczbę równolegle uruchomionych
sesji snmp. osiągam limit na ilość otworzonych plików i 1019 sesja już
się nie tworzy.

w tej chwili mam coś mniej więcej

while(są jeszcze hosty do zbadania) {
 pobierz z bazy dane następnego hosta
 stwórz dla niego obiekt SNMP::Session
 odpal session->get
}

chciałbym raczej

while (są jeszcze hosty do zbadania) {
  jak jest już uruchomionych LIMIT sesji poczekaj
  pobierz z bazy dane następnego hosta
  stwórz dla niego obiekt SNMP::Session
  odpal session->get
}

jakiś pomysł jak to osiągnąć?

skłaniam się do
a) pobrać z bazy wszystkie hosty, wrzucić je w jakiegoś hasza i w pętli
while(są w haszu jeszcze hosty do zbadania) {
 if jestem poniżej limitu {
	monitoruj host
	wyjmij hosta z hasza
 }
 else continue
}

ta pętla powinna mi w końcu zbadać wszystkie hosty

ewentualne pomysł b)

pobrać z bazy hosty paczkami, najpierw pierwsze 400, potem drugie 400,
itd. uruchomić pomiary snmp dla pierwszej paczki, jak cała się skończy
dla drugiej, itd,


-- 
Paweł
Re: non-blocking snmp
#52569
Author: Stachu 'Dozzie' K.
Date: Mon, 20 Jan 2014 20:05
33 lines
2288 bytes
On 2014-01-20, Paweł <jas@nie.doczekal> wrote:
> piszę skrypt odpytujący po SNMP kilka tysięcy hostów. używam biblioteki
> net-snmp-perl, sesje snmp puszczam w trybie non-blocking. wszystko
> działa pięknie ale chciałbym ograniczyć liczbę równolegle uruchomionych
> sesji snmp. osiągam limit na ilość otworzonych plików i 1019 sesja już
> się nie tworzy.

ulimit -n, /etc/security/limits.conf

> w tej chwili mam coś mniej więcej
[...]
> chciałbym raczej
>
> while (są jeszcze hosty do zbadania) {
>   jak jest już uruchomionych LIMIT sesji poczekaj
>   pobierz z bazy dane następnego hosta
>   stwórz dla niego obiekt SNMP::Session
>   odpal session->get
> }
>
> jakiś pomysł jak to osiągnąć?

Pula wątków?

Możesz obejrzeć jak ja to zrobiłem (na procesach) dla połączeń XML-RPC
w skrypcie xmlrpcaller: http://dozzie.jarowit.net/git?p=xmlrpcd.git
Chociaż ten kod generalnie jest brzydki.
Interesuje cię funkcja multicall() i pakiety Worker::Spool
i Worker::Spool::Child zdefiniowane pod koniec xmlrpcallera.

-- 
Secunia non olet.
Stanislaw Klekot
Re: non-blocking snmp
#52570
Author: Paweł
Date: Mon, 20 Jan 2014 23:23
38 lines
2343 bytes
W dniu 20.01.2014, 21:05, Stachu 'Dozzie' K. pisze:
> On 2014-01-20, Paweł <jas@nie.doczekal> wrote:
>> piszę skrypt odpytujący po SNMP kilka tysięcy hostów. używam biblioteki
>> net-snmp-perl, sesje snmp puszczam w trybie non-blocking. wszystko
>> działa pięknie ale chciałbym ograniczyć liczbę równolegle uruchomionych
>> sesji snmp. osiągam limit na ilość otworzonych plików i 1019 sesja już
>> się nie tworzy.
> 
> ulimit -n, /etc/security/limits.conf
> 
urządzeń jest coś 40 000. nie chcę aż tak limitów zwiększać.
>> w tej chwili mam coś mniej więcej
> [...]
>> chciałbym raczej
>>
>> while (są jeszcze hosty do zbadania) {
>>   jak jest już uruchomionych LIMIT sesji poczekaj
>>   pobierz z bazy dane następnego hosta
>>   stwórz dla niego obiekt SNMP::Session
>>   odpal session->get
>> }
>>
>> jakiś pomysł jak to osiągnąć?
> 
> Pula wątków?
> 
> Możesz obejrzeć jak ja to zrobiłem (na procesach) dla połączeń XML-RPC
> w skrypcie xmlrpcaller: http://dozzie.jarowit.net/git?p=xmlrpcd.git
> Chociaż ten kod generalnie jest brzydki.
> Interesuje cię funkcja multicall() i pakiety Worker::Spool
> i Worker::Spool::Child zdefiniowane pod koniec xmlrpcallera.
> 
pula wątków nie rozwali mi non-blocking snmp? czekania w
SNMP::MainLoop(); na koniec przetwarzania, i SNMP::finish(); w
procedurze callback w session->get() ?

-- 
Paweł
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads