Давайте попробуем отобразить системную память в динамическом графике. Будем использовать опять знакомую java-библиотеку JFreechart, но данные получать при помощи DTrace, а именно java-интерфейса - JDTrace. Слегка изменим для наших нужд скрипт swapinfo.d из коллекции DTrace-Toolkit, нам нужны только цифры (оставляем только "printf("%d"... )"). Вместо dtrace:::BEGIN напишем profile:::tick-3sec - будем обновлять график каждые 3 секунды.
Затем вызовем скрипт (я переименовал его в meminfo.d) при помощи jdtrace и выведем полученные цифры в bar-chart:
...
import org.opensolaris.os.dtrace.*;
...
File file = new File("meminfo.d");
Consumer consumer = new LocalConsumer();
consumer.addConsumerListener(new ConsumerAdapter() {
public void dataReceived(DataEvent e) {
ProbeData data = e.getProbeData();
java.util.List < Record > records = data.getRecords();
r1 = Integer.parseInt(records.get(0).toString());
r2 = Integer.parseInt(records.get(1).toString());
...
dataset = new DefaultCategoryDataset();
dataset.addValue(r1, "Memory", "RAM Total");
dataset.addValue(r2, "Memory", "RAM Unusable");
...
try {
consumer.open();
consumer.compile(file);
consumer.enable();
consumer.go();
...
Подробнее об использовании JDtrace можно почитать на
opensolaris.
Стоит заметить что в Eclipse у меня были проблемы с consumer.open() - он упорно требовал аргументы, но все прекрасно собралось в Netbeans.
Итак, перед нами результат скрещивания JDTrace и JFreechart:
Как видно из графика, при 512 Мб оперативки swap я себе отхатил неслабый - не обращайте внимания, это для экспериментов с памятью.
Кому интересно - можно взять программу
здесь.