- memory_submit ("used", mem_used);
- memory_submit ("free", mem_free);
- memory_submit ("locked", mem_lock);
-/* #endif defined(HAVE_LIBKSTAT) */
+ MEMORY_SUBMIT ("used", (gauge_t) mem_used,
+ "free", (gauge_t) mem_free,
+ "locked", (gauge_t) mem_lock,
+ "kernel", (gauge_t) mem_kern,
+ "arc", (gauge_t) arcsize,
+ "unusable", (gauge_t) mem_unus);
+/* #endif HAVE_LIBKSTAT */
+
+#elif HAVE_SYSCTL
+ int mib[] = {CTL_VM, VM_METER};
+ struct vmtotal vmtotal = { 0 };
+ gauge_t mem_active;
+ gauge_t mem_inactive;
+ gauge_t mem_free;
+ size_t size;
+
+ size = sizeof (vmtotal);
+
+ if (sysctl (mib, 2, &vmtotal, &size, NULL, 0) < 0) {
+ char errbuf[1024];
+ WARNING ("memory plugin: sysctl failed: %s",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ return (-1);
+ }
+
+ assert (pagesize > 0);
+ mem_active = (gauge_t) (vmtotal.t_arm * pagesize);
+ mem_inactive = (gauge_t) ((vmtotal.t_rm - vmtotal.t_arm) * pagesize);
+ mem_free = (gauge_t) (vmtotal.t_free * pagesize);
+
+ MEMORY_SUBMIT ("active", mem_active,
+ "inactive", mem_inactive,
+ "free", mem_free);
+/* #endif HAVE_SYSCTL */