Here's some code we use to get memory and CPU usage in a displayable form: (defn- as-megabytes "Given a sequence of byte amounts, return megabyte amounts as string, with an M suffix." [memory] (map #(str (int (/ % 1024 1024)) "M") memory))
(defn- as-percentage "Given a pair of values, return the percentage as a string." [[a b]] (str (int (* 100 (/ a b))) "%")) (defn- memory-bean "Return the MemoryMXBean." [] (java.lang.management.ManagementFactory/getMemoryMXBean)) (defn- heap-usage "Given a MemoryMXBean, return the heap memory usage." [^java.lang.management.MemoryMXBean bean] (.getHeapMemoryUsage bean)) (defn- heap-used-max "Given heap memory usage, return a pair of used/max values." [^java.lang.management.MemoryUsage usage] [(.getUsed usage) (.getMax usage)]) (defn memory-usage "Return percentage, used, max heap as strings." [] (let [used-max (-> (memory-bean) (heap-usage) (heap-used-max))] (cons (as-percentage used-max) (as-megabytes used-max)))) (defn- operating-system-bean "Return the OperatingSystemMXBean." [] (java.lang.management.ManagementFactory/getOperatingSystemMXBean)) (defn- cpus "Given an OSMXBean, return the number of processors." [^java.lang.management.OperatingSystemMXBean bean] (.getAvailableProcessors bean)) (defn- load-average "Given an OSMXBean, return the load average for the last minute." [^java.lang.management.OperatingSystemMXBean bean] (.getSystemLoadAverage bean)) (defn- cpu-percentage "Given the number of CPUs and the load-average, return the percentage utilization as a string." [[cpus load-average]] (str (int (* 100 (/ load-average cpus))) "%")) (defn cpu-usage "Return utilization (as a string) and number of CPUs and load average." [] (let [bean (operating-system-bean) data ((juxt cpus load-average) bean)] (cons (cpu-percentage data) data))) On Wed, Sep 12, 2012 at 10:12 AM, larry google groups <lawrencecloj...@gmail.com> wrote: > I need to know how much memory my app is using (it is a long running > service). I see that some people have asked about how to measue memory use. > Robert McIntyre asked, "get the total memory used by a data structure?" Some > of the answers imply that it is easy to get the total memory use of the app > (much easier than getting the memory used by a particular data structure?). > I am ignorant of the JVM. How can I find the total memory used at any given > moment by my app? > > Goal: I wrote a small app that uses Ring and Moustache and Enlive. It lives > on my server and runs perpetually. I worry about it crashing, or becoming > overloaded. I am setting up some ping services (not sure which yet, Nagios, > or Puppet or something) to ask the app "Are you still alive?" I've > established a special Moustache route just for the ping. It occurred to me > that the ping could get some useful info, like memory, and save that to a > file. That would give me the a good time series about the real world memory > use, maybe every 5 minutes. > > I established the app with this JVM setting: > > :jvm-opts ["-Xmx4000m"] > > Within that limit, I'd like to know what is going on. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en