Wednesday, September 24, 2008

System info in solaris and linux

If you work for a non microsoft shop, its highly likely that you would develop and/or deploy your applications in linux or solaris systems. Our windows to the target system is the ubiquitous command line via ssh. Here are some of the commands that I find useful to get the details of target system.


Solaris commands
Hardware deatails
Processor /usr/sbin/psrinfo -v
Memory /usr/sbin/prtconf -v | grep Memory
HD /usr/sbin/format < /dev/null

Current statistics
memory statistics /usr/bin/vmstat
io statistics /usr/bin/iostat
network statistics /usr/bin/netstat
disk space usage /usr/sbin/df

Process details
list of processes running /usr/bin/ps -aef

memory usage for a given process /usr/bin/pmap processid | grep total

list of ports open for a given process
/usr/proc/bin/pfiles processId | grep "port: portId"


I have listed only the commands. A simple google or map page should give you details about each of the command. I will follow it up with Linux command later.

Monday, September 22, 2008

ServiceMix 3.2.1 with ActiveMQ 4.1 Gotchas

We have using servicemix for last year or so. So far the results have been mixed. The most important downside is being activemq. One of my initial draw to servicemix was activemq and its seda flow support. ActiveMQ has been mediocre at best in our situation. I would list some of the gotchas and how we came across it.

When you have mulitple fast publishers and slow subscribers activemq sometimes freezes up. This becomes all the more common if a subscriber did not close the connection gracefully. The reason is activemq's internal memory cache that stores the messages untile a subscriber has successfuly received the messaged. The memory cache is set to 20MB by default. If the memory cache runs out of space, the broker freezes up as all the threads wait on the cache to release some space, which does not happen in case of faulty subscriber.

You can increase the cache size by setting activemq' usagemessage size in bytes as follows.


<amq:broker id="hub" useShutdownHook="false" useJmx="false" persistent="false" brokerName="hub" >
....

<!-- set limit to 200mb -->
<amq:memoryManager >
<amq:usageManager limit="209657600"/>
</amq:memoryManager>

</amq:broker>