Monitoraggio di processi e thread di sistema
Metodologia
Il monitoraggio di processi e thread di sistema è quanto mai difficoltoso in Java, per le seguenti ragioni:
- la JVM si colloca al di sopra del sistema operativo, e non ha visibilità dello stesso;
- le API Java non contengono al loro interno funzioni che possano recuperare informazioni su processi o thread.
Per far fronte a queste limitazioni è possibile uscire dalla JVM, scrivendo del codice nativo
(tipicamente C o C++, ma anche in qualsiasi altro linguaggio che usi lo stesso meccanismo di chiamata a funzione) che sarà poi eseguito, con un particolare meccanismo, all'interno del normale codice Java.
Per fare questo gli stessi programmatori della Sun hanno previsto una particolare interfaccia, chiamata JNI (Java Native Interface) per caricare codice nativo sottoforma di DLL (Dynamic Link Library).
Senza entrare nel merito dei meccanismi, si dirà soltanto che con tale espediente è possibile
invocare delle primitive di sistema direttamente dal codice Java. Tali primitive, ovviamente, recupereranno informazioni sullo stato dei processi e dei thread nativi in un modo che è peculiare dellla specifica piattaforma (Win32, Solaris, Linux, ...).
Questo ovviamente comporta che il codice contenuto nella DLL, nonchè il suo stesso nome e formato , non sono portabili così come il bytecode Java. Per mantenere la portabilità
dell'intero programma occorrerà pertanto sviluppare una DLL per ogni piattaforma conosciuta, e
rendere la semantica delle funzioni native quanto più possibile trasparente dall'architettura sottostante.
Che cosa misurare
Nel caso in esame, cioè il monitoraggio di processi e thread di sistema, si è sviluppato un pacchetto
software compatibile con Windows NT e con tutti i sistemi UNIX di tipo SVR4 (ad esempio Solaris), i cui dettagli verranno analizzati più avanti.
Le informazioni che il monitor è in grado di ottenere sono:
- un elenco di tutti i processi del sistema; per ciascuno di essi, inoltre:
- la CPU utilizzata, in millisec o in percentuale
- la memoria fisica allocata
- la memoria virtuale
- i thread costituenti;per ciascuno di essi, inoltre:
- la CPU utilizzata, in millisec o in percentuale
- il traffico di pacchetti IP in ingresso e in uscita
- il traffico di pacchetti UDP in ingresso e in uscita
- il traffico di segmenti TCP in ingresso e in uscita