vmstat.pl 957 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/local/bin/perl
  2. #
  3. # requires textproc/p5-XML-LibXML
  4. #
  5. use warnings;
  6. use strict;
  7. use feature 'say';
  8. use XML::LibXML;
  9. my ($offset) = @ARGV;
  10. if (not defined $offset) {
  11. $offset = 10;
  12. }
  13. my $filename = 'vmstat.xml';
  14. my %dict;
  15. while (1) {
  16. say scalar localtime();
  17. say "------------------------";
  18. system("/usr/bin/vmstat -z --libxo xml >$filename");
  19. my $doc = XML::LibXML->load_xml(location => $filename);
  20. my $c = 0;
  21. foreach my $id ($doc->findnodes('//zone')) {
  22. my $name=$id->findvalue('name');
  23. my $used=$id->findvalue('used');
  24. my $val = int($used);
  25. if ($name eq "vm pgcache") {
  26. $name = $name . "_$c";
  27. $c++;
  28. }
  29. if (exists $dict{$name}) {
  30. my $v0=$dict{$name} + $offset;
  31. if ($v0 <= $val) {
  32. format DIFF_V0V1 =
  33. @<<<<<<<<<<<<<<<<<<<<<< @######## => @########
  34. $name,$dict{$name},$val
  35. .
  36. $~ = "DIFF_V0V1";
  37. write;
  38. $dict{$name} = $val;
  39. }
  40. } else {
  41. $dict{$name} = $val;
  42. }
  43. }
  44. say '';
  45. sleep(5);
  46. }