eclipsed
Posted on March 29th, 2009 by doug. Filed under Solaris, UNIX & Windows, eclipse, shell.

I’ve been working with Remote System Explorer (RSE), a terminal and ssh session manager that runs in the Eclipse SDK. This is very cool – the thing is, eclipse runs on Solaris, Linux, Windows, MAC OSX, IBM AIX (of course – IBM created the eclipse framework). It as close to an OS-agnostic framework as anything I’ve ever experienced.
I had primarily intended to use it on windows to add ssh terminal capacity – replacing console2 and cygwin – to connect to UNIX servers. But the interface is so good, I find I’m using it on both UNIX and windows – the konsole terminal is better in some ways at history and at cut-and-paste using mouse buttons directly. So far the context menu from a right-click is the only cut-and-paste that functions within the terminal windows themselves.
On the other hand – in konsole each separate terminal window is a separate authentication – password-response – whereas in eclipse RSE, one authentication can be kept and spawn as many terminal sessions as needed. The organization is better. You can close the terminal sessions down, and leave a connection still intact. Then bring back terminal sessions as needed. That ability alone makes it worth losing the double-click select and middle-button paste from konsole sessions. I’m not yet convinced I can’t find a way to get that working either, that and an unlimited history or at least 10000 lines…
If I can get that back somehow in the terminal sessions it will be not just slightly better, but a huge amount better than any other session management I’ve used.
Install
You need java. On windows that can be an issue. On UNIX, not so much, pretty much there by default.
Download RSE and eclipse SDK.
Untar or unzip the eclipse package. In windows I unzip to c:\eclipse_3.4.2. In UNIX /usr/local/eclipse.
Unzip the RSE package layered over the eclipse install.
In windows I point a shortcut to c:\eclipse_3.4.2. In UNIX I move /usr/local/eclipse to /usr/local/eclipse_3.4.2, and create a symbolic link /usr/local/eclipse -> /usr/local/eclipse_3.4.2.
Open eclipse. Go to window -> open perspective -> other and open Remote System Explorer.
Configurations are stored in the workspace folder. Right-click in the left-hand pane and select “New Connection to create connections. Within eclipse you can add software respositories and update and add software from Help -> Software Updates.
— doug
firefox 3 – not so much
Posted on March 10th, 2009 by doug. Filed under browsers, decay, entropy, firefox.
I used Firefox 2 with about seven plugins that I considered must-haves – things like Adblock Plus and Flashblock and Colorful Tabs and Tabbrowser and Remember Mismatched Domains. I recommended it highly, and if it had occasional crashes, they were few and far between enough that I never paid them a lot of attention.
Firefox 3. Not so much. I’ve been waiting since the product first came out for a resolution to whatever memory leak or looping code causes it to just lock up the entire desktop and churn away until I kill it off.
I’ve been using Opera, which I just find a bit odd, but mostly faster and mostly stable. I’ve downloaded Chromium for linux, Codeweaver’s proof-of-concept of running Chrome under wine on linux. And I downloaded and installed opera, chrome and even Apple’s safari on windows.
This firefox misbehavior seems to happen on BOTH operating systems. Here’s a shot of the current bahavior:
Tasks: 180 total, 2 running, 178 sleeping, 0 stopped, 0 zombie
Cpu(s): 70.1%us, 2.7%sy, 0.0%ni, 27.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2066104k total, 2023092k used, 43012k free, 296832k buffers
Swap: 1646620k total, 39812k used, 1606808k free, 972692k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17146 dsm 20 0 373m 180m 35m R 143 8.9 71:52.02 firefox
4995 root 20 0 387m 53m 4744 S 2 2.7 137:35.74 Xorg
7409 dsm 20 0 32592 15m 11m S 1 0.8 0:09.48 konsole
5343 root 20 0 3304 1044 908 S 0 0.1 2:40.47 hald-addon-stor
7793 dsm 20 0 53516 32m 2236 S 0 1.6 9:09.60 synergys
1 root 20 0 2844 1688 544 S 0 0.1 0:01.84 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root RT -5 0 0 0 S 0 0.0 0:00.00 migration/0
4 root 15 -5 0 0 0 S 0 0.0 0:03.72 ksoftirqd/0
5 root RT -5 0 0 0 S 0 0.0 0:00.00 watchdog/0
6 root RT -5 0 0 0 S 0 0.0 0:00.00 migration/1
7 root 15 -5 0 0 0 S 0 0.0 0:01.32 ksoftirqd/1
8 root RT -5 0 0 0 S 0 0.0 0:00.00 watchdog/1
9 root 15 -5 0 0 0 S 0 0.0 0:04.90 events/0
10 root 15 -5 0 0 0 S 0 0.0 0:03.88 events/1
11 root 15 -5 0 0 0 S 0 0.0 0:00.00 khelper
46 root 15 -5 0 0 0 S 0 0.0 0:00.28 kblockd/0
47 root 15 -5 0 0 0 S 0 0.0 0:00.30 kblockd/1
50 root 15 -5 0 0 0 S 0 0.0 0:00.00 kacpid
51 root 15 -5 0 0 0 S 0 0.0 0:00.00 kacpi_notify
126 root 15 -5 0 0 0 S 0 0.0 0:00.00 kseriod
160 root 20 0 0 0 0 S 0 0.0 0:07.48 pdflush
161 root 20 0 0 0 0 S 0 0.0 0:02.20 pdflush
162 root 15 -5 0 0 0 S 0 0.0 0:02.10 kswapd0
and then after killing it off and restarting:
root@dali:/home/dsm/Desktop/programmes# killall firefox
root@dali:/home/dsm/Desktop/programmes# top
top - 14:46:04 up 10 days, 23:08, 1 user, load average: 0.96, 1.31, 1.25
Tasks: 180 total, 3 running, 177 sleeping, 0 stopped, 0 zombie
Cpu(s): 6.9%us, 0.6%sy, 0.0%ni, 92.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2066104k total, 1955112k used, 110992k free, 296928k buffers
Swap: 1646620k total, 39812k used, 1606808k free, 953204k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17650 dsm 20 0 248m 126m 28m R 17 6.2 0:25.31 firefox
4995 root 20 0 387m 53m 4520 S 1 2.7 137:42.25 Xorg
7366 dsm 20 0 29972 11m 8668 S 0 0.6 1:29.68 kwin
7370 dsm 20 0 36764 18m 13m S 0 0.9 11:19.00 kicker
7793 dsm 20 0 53516 32m 2236 S 0 1.6 9:11.19 synergys
1 root 20 0 2844 1688 544 S 0 0.1 0:01.84 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root RT -5 0 0 0 S 0 0.0 0:00.00 migration/0
4 root 15 -5 0 0 0 S 0 0.0 0:03.72 ksoftirqd/0
5 root RT -5 0 0 0 S 0 0.0 0:00.00 watchdog/0
6 root RT -5 0 0 0 S 0 0.0 0:00.00 migration/1
7 root 15 -5 0 0 0 S 0 0.0 0:01.32 ksoftirqd/1
8 root RT -5 0 0 0 S 0 0.0 0:00.00 watchdog/1
9 root 15 -5 0 0 0 S 0 0.0 0:04.92 events/0
10 root 15 -5 0 0 0 S 0 0.0 0:03.88 events/1
11 root 15 -5 0 0 0 S 0 0.0 0:00.00 khelper
46 root 15 -5 0 0 0 S 0 0.0 0:00.28 kblockd/0
47 root 15 -5 0 0 0 S 0 0.0 0:00.30 kblockd/1
50 root 15 -5 0 0 0 S 0 0.0 0:00.00 kacpid
51 root 15 -5 0 0 0 S 0 0.0 0:00.00 kacpi_notify
126 root 15 -5 0 0 0 S 0 0.0 0:00.00 kseriod
160 root 20 0 0 0 0 S 0 0.0 0:07.48 pdflush
161 root 20 0 0 0 0 S 0 0.0 0:02.20 pdflush
162 root 15 -5 0 0 0 S 0 0.0 0:02.10 kswapd0
Yes – that first figure – 143% of the cpu. Dropping back to 17% of the CPU with the same tabs and sites loaded.
Whatever. I don’t WANT to pay attention to the browser – the whole point of firefox was to NOT have to pay attention, and they have completely ruined that in version 3.
There is something seriously wrong with firefox, that causes it over time to start misbehaving and to require a reload from scratch. And this seems to occur on both windows and Linux. It is no longer useful. It also seems to being misbehavior once it has downloaded just about any kind of update whether for the browser or a plugin.
I’ve been waiting for firefox three to fix this. Recently firefox 3.07 came out. I just got the window informing me that it has upgraded me to the latest!!!. Just this morning. And yet… And yet – it is still BROKEN.
When you go onto the internet and search for Firefox 3 performance or cpu or memory issues – the first ten or fifteen google results laud firefox three for its blazing performance. True – for awhile. Eventually it will force you to pay attention to it by hanging and chewing up your cpu to where your computer is no longer working.
I wish they’d fix it. But whether they do or not,
I can’t wait for Chrome to come out for linux…

–doug
PermGen space error in jBoss
Posted on January 22nd, 2009 by doug. Filed under jboss.
“java.lang.OutOfMemoryError: PermGen space”
First the application was acting really slow and sluggish, then stopped responding – in looking at the log we saw “java.lang.OutOfMemoryError: PermGen space” as soon as the application was accessed.
The resolution was to set “-XX:MaxPermSize=128m” in the startup script.
to the string sizing the jBoss server is now: “-server -Xms256m -Xmx768m -XX:MaxPermSize=128m”, and that error is gone.
In looking for more data I found:
One more interesting flavor of the same error message, less common but hence even more troublesome is: “java.lang.OutOfMemoryError: PermGen space”. Most of the memory profiler tools are unable to detect this problem, so it is even more troublesome and therefor – interesting.
To understand this error message and fix it, we have to remember that, for optimized, more efficient garbage-collecting Java Heap is managed in generations – memory segments holding objects of different ages.
Garbage collection algorithms in each generation are different. Objects are allocated in a generation for younger objects – the Young Generation, and because of infant mortality most objects die there. When the young generation fills up it causes a Minor Collection. Assuming high infant mortality, minor collections are garbage- collected frequently.
Some surviving objects are moved to a Tenured Generation. When the Tenured Generation needs to be collected there is a Major Collection that is often much slower because it involves all live objects. Each generation contains variables of different length of life and different GC policies are applied to them.
There is a third generation too – Permanent Generation. The permanent generation is special because it holds meta-data describing user classes (classes that are ot part of the Java language). Examples of such meta-data are objects describing classes and methods and they are stored in the Permanent Generation.
Applications with large code-base can quickly fill up this segment of the heap which will cause java.lang.OutOfMemoryError: PermGen no matter how high your -Xmx and how much memory you have on the machine.
Sun JVMs allow you to resize the different generations of the heap, including the permanent generation. On a Sun JVM (1.3.1 and above) you can configure the initial permanent generation size and the maximum permanent generation size.
To set a new initial size on Sun JVM use the -XX:PermSize=64m option when starting the virtual machine. To set the maximum permanent generation size use -XX:MaxPermSize=128m option. If you set the initial size and maximum size to equal values you may be able to avoid some full garbage collections that may occur if/when the permanent generation needs to be resized. The default values differ from among different versions but for Sun JVMs upper limit is typically 64MB.
— dsm
how to monitor ibm mq from nagios
Posted on October 21st, 2008 by doug. Filed under websphere.
This was one of the search terms that found an article here… I hadn’t addressed this directly, but I use Nagios to monitor my company’s server environment, and specifically implemented that monitoring for IBM Websphere MQ.
For MQ, I run nagios monitoring against queue depth and processes. I installed three plugins to run against WebSphere. Of these one was developed for my company’s needs (qdepth), one was changed slightly (channels) and the last debugged, found not to actually measure accurately, and not resolved (message age).
Here’s the nagios console for the websphere MQ server. “message age” in the second qdepth check service title is deceptive – actually checking qdepth…
This is the commands section from the nrpe.cfg file on the WebSphere MQ server.
command[check_mq_channel]=/usr/local/nagios/libexec/check_mq_channel.sh $ARG1$ $ARG2$
command[check_mq_msgage]=/usr/local/nagios/libexec/check_mq_msgage.sh $ARG1$ $ARG2$ $ARG3$ $ARG4$
command[wmq_check_qdepth]=/usr/local/nagios/libexec/wmq_check_qdepth.pl $ARG1$ $ARG2$ $ARG3$
Of these we only really using qdepth monitoring. The channels come up triggered, so an inactive state is fine, and the plugin as written only tests for “running”. The message age plugin, as I mentioned, doesn’t actually work.
When I first looked at setting this messaging up and then monitoring it, I searched for “nagios monitoring MQ webshere” and found several pre-written plugins. I took each plugin and tested it for usability and for accurate results and for meeting what we needed for monitoring.
The message age plugin, in testing, actually returned a hard-coded result rather than actually testing and returning a valid answer. I started to fix it, set it aside and haven’t resolved it. I don’t recall the source for the plugin. Check each piece of code you download from the internet – it may have gone through extensive development and testing, or it could just as easily have been hacked together in an hour. Your mileage may seriously vary and I would highly recommend you verify any of this before you bet your job on it.
Here’s the qdepth plugin – I think I wrote or re-wrote this pretty much from scratch, but the original concept for parsing runmcsc came from one of the plugins I downloaded, written by Kyle O’Donnell – the channel plugin has his original author credit intact. This plugin has alerted once to an increasing qdepth, which turned out to be an issue with an SSL certificate.
#! /bin/perl
## wmq_check_qdepth.pl
#
# nrpe (nagios) script to check websphere qdepth
# uses runmqsc binary
#
# display queue ('APP.REQUEST')
# 8 : display queue ('APP.REQUEST')
# AMQ8409: Display Queue details.
# QUEUE(APP.REQUEST) TYPE(QLOCAL)
# ACCTQ(QMGR) ALTDATE(2008-01-22)
# ALTTIME(14.18.23) BOQNAME( )
# BOTHRESH(0) CLUSNL( )
# CLUSTER( ) CLWLPRTY(0)
# CLWLRANK(0) CLWLUSEQ(QMGR)
# CRDATE(2008-01-22) CRTIME(14.18.23)
# CURDEPTH(0) DEFBIND(OPEN)
# DEFPRTY(0) DEFPSIST(NO)
# DEFSOPT(SHARED) DEFTYPE(PREDEFINED)
# DESCR( ) DISTL(NO)
# GET(ENABLED) HARDENBO
# INITQ( ) IPPROCS(0)
# MAXDEPTH(5000) MAXMSGL(4194304)
# MONQ(QMGR) MSGDLVSQ(PRIORITY)
# NOTRIGGER NPMCLASS(NORMAL)
# OPPROCS(0) PROCESS( )
# PUT(ENABLED) QDEPTHHI(80)
# QDEPTHLO(20) QDPHIEV(DISABLED)
# QDPLOEV(DISABLED) QDPMAXEV(ENABLED)
# QSVCIEV(NONE) QSVCINT(999999999)
# RETINTVL(999999999) SCOPE(QMGR)
# SHARE STATQ(QMGR)
# TRIGDATA( ) TRIGDPTH(1)
# TRIGMPRI(0) TRIGTYPE(FIRST)
# USAGE(NORMAL)
### Variables ###
# test values set if this flag is true (1)
### THIS MUST BE SET TO 0 IN PRODUCTION!!! ###
my $test = 0;
# debug flag (adds messages)
my $debug = 0;
my $LOG = "/tmp/wmq_check_qdepth.pl.log";
# runmqsc binary
my $MQSC = "/opt/mqm/bin/runmqsc";
### ARGS ###
# first argument is warn level
my $WARN = shift;
# second arg is crtitical level
my $CRIT = shift;
# third arg is queue name
my $QUEUE = shift;
# set for dev purposes
if ($test) {
$WARN = 5;
$CRIT = 10;
$QUEUE = "1A33.EVG.REQUEST";
}
# validate
# WARN and CRIT must be greater than 0 and CRIT must be greater than WARN
unless (($WARN > 0) && ($CRIT > 0)) {
print ("Command Failed: WARN and CRIT levels must be greater than 0\n");
exit 3;
}
unless ($CRIT > $WARN) {
print ("Command Failed: CRIT must be greater than WARN\n");
exit 4;
}
### Subs ###
### MAIN ###
# run query
my $result = `echo "display queue ('${QUEUE}')" | $MQSC | grep CURDEPTH`;
print ("result: $result\n") if $debug;
# parse result
my @lines = split ("\n", $result); # divide into an array by end of line...
# each element of the array will contain a single line
# set variables
my ($PARAM, $VALUE);
for my $line (@lines) {
# each line is one or two elements like "QDPLOEV(DISABLED) QDPMAXEV(ENABLED)"
# divide those...
my ($first, $discard) = split (' ', $line);
print ("\$first: $first \$discard $discard\n") if $debug;
($PARAM, $VALUE) = split ('\(', $first);
$VALUE =~ s/\)//;
print ("\$PARAM: $PARAM \$VALUE: $VALUE\n") if $debug;
}
# testing value
$VALUE = 13 if $test;
# check for $WARN and $CRIT levels, exit 0 as OK, 1 as warn or 2 as critical
if ($VALUE == 0) {
print ("OK: found qdepth for $QUEUE at 0\n");
exit 0;
} elsif ($VALUE < $WARN) {
print ("OK: found qdepth for $QUEUE at $VALUE\n");
exit 0;
} elsif (($VALUE >= $WARN) && ($VALUE < $CRIT)) {
print ("WARN: qdepth of $QUEUE is at $VALUE: exceeds WARN thresh of $WARN\n");
exit 1;
} elsif ($VALUE >= $CRIT) {
print ("CRITICAL: qdepth for $QUEUE at $VALUE: exceeds CRITICAL thresh of $CRIT\n");
exit 2;
}
This is the channel status plugin – I may have re-written the original data gathering runmssc string, but the majority of the plugin remained intact…
#!/bin/ksh
#
# check queue manager status
#
# Kyle O'Donnell
#
#$Id: check_mq_channel,v 1.2 2007/04/04 14:36:02 kodonnel Exp $
#
# debug
DATE=`date`
LOG="/tmp/nrpe_check_mq_channel.sh.log"
echo "" >> $LOG
echo $DATE >> $LOG
echo "" >> $LOG
[ $# -ne 2 ] && echo "usage: $0 " && exit 3
channel=$1
qmgr=$2
echo "channel: $channel qmanager: $qmgr" >> $LOG
RUNMQSC="/opt/mqm/bin/runmqsc"
chanstatus=`echo "dis chs(${channel}) status" | ${RUNMQSC} ${qmgr} | grep -i "status(running)"`
echo "channel status result: $chanstatus" >> $LOG
if echo $chanstatus |grep -i "status(running)" > /dev/null 2>&1; then
STATE=0
printf "${channel} on ${qmgr} running"
echo ""
echo ""
else
STATE=2
printf "${channel} on ${qmgr} not running"
echo ""
echo ""
fi
echo "state: $STATE" >> $LOG
exit $STATE;
Here’s the server.cfg file for the Websphere MQ machine on the nagios server:
define service {
use generic-service
host_name mq1
service_description Host Alive
check_period 24x7
contact_groups unix-administrators
notification_period 24x7
check_command check-host-alive
}
define service {
use generic-service
host_name mq1
service_description Sonic Bridge java process
check_period 24x7
contact_groups esb-administrators
notification_period 24x7
check_command check_unix_proc!mqm!1!java
}
define service {
use generic-service
host_name mq1
service_description SSB queue depth EVGPQM01.DEAD.QUEUE message age
check_period 24x7
contact_groups systems-services,help_desk
notification_period 24x7
check_command wmq_check_qdepth!1!3!QMGR01!QMGR01.DEAD.QUEUE
}
define service {
use generic-service
host_name mq1
service_description server queue depth APPLICATION.RESPONSE
check_period 24x7
contact_groups systems-services,help_desk
notification_period 24x7
check_command wmq_check_qdepth!5!10!APPLICATION.RESPONSE
}
define service {
use generic-service
host_name mq1
service_description server queue depth OPPOSITE-QMGR
check_period 24x7
contact_groups systems-services,help_desk
notification_period 24x7
check_command wmq_check_qdepth!5!10!OPPOSITE-QMGR
}
define service {
use generic-service
host_name mq1
service_description WMQ command server
check_period 24x7
contact_groups systems-services,help_desk
notification_period 24x7
check_command check_unix_proc!mqm!1!amqpcsea
}
define service {
use generic-service
host_name mq1
service_description WMQ Critical process manager
check_period 24x7
contact_groups systems-services,help_desk
notification_period 24x7
check_command check_unix_proc!mqm!1!amqzmuc0
}
The strategy is to monitor qdepth and processes specific to IBM WebSphere MQ on the Websphere MQ server, along with the normal UNIX processes and disk space.
— dsm
two sticks – visual economics
Posted on October 20th, 2008 by doug. Filed under entropy.
The world goes crazy because the money stops flowing. Why?
George Dyson wrote an essay on current finances in the world. In that essay, he recounts the history of “tallies”, sticks of wood carefully notched to indicate funds and dates. Money deposited in the Exchequer for the use of the king was tallied, accounted for on the stick and then the stick split. The tally was split and one half remained at the place of deposit (and was called the “stock”, thus the original of the term we have), the other half went with the depositor.
Take that essay, distill it into the New York Times and another article, this one an Op Ed piece by Richard Dooling. Quote:
Somehow the genius quants — the best and brightest geeks Wall Street firms could buy — fed $1 trillion in subprime mortgage debt into their supercomputers, added some derivatives, massaged the arrangements with computer algorithms and — poof! — created $62 trillion in imaginary wealth…
…Making money, it seems, is all about the velocity of moving it around, so that it can exist in Hong Kong one moment and Wall Street a split second later.
Go back to the tallies – a stock of wood representing money.
If you wave that stick back and forth REALLY REALLY fast, it looks like you have two of ‘em.
There’s your hallucinatory addition of wealth. If you move the money around fast enough, it looks like it is in two places at once, or more. Using computer and advanced made-up economic vehicles, you get 62 places at once.
That analogy, and, actually, metaphor, that visual of someone waving a stick back and forth in furious concentration, that works for me. Scale it up, make it much harder to see, make it shiny, call it a credit swap or a derivative, and you really are in that same place, waving a magic stick back and forth and insisting there are two of them.
Brilliant.
The plates twirling at the top of the sticks are fine as long as they are moving. The financial markets don’t come to an actual static accounting unless and until the movement stops. Visual economics.
Optical illusion. Optional Delusion. Or maybe not so optional – maybe just a matter of perception.

—dsm
ports and processes in Solaris
Posted on September 24th, 2008 by doug. Filed under Solaris.
In Linux, “netstat -apn” will list processes versus ports bound to:
dsm@dali:~$ netstat -apn
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:24800 0.0.0.0:* LISTEN 9353/synergys
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN -
tcp 0 0 172.17.8.76:43003 172.19.235.82:22 ESTABLISHED 4305/ssh
tcp 0 0 172.17.8.76:32852 198.200.144.106:22 ESTABLISHED 13523/ssh
tcp 0 0 172.17.8.76:44173 198.200.144.106:22 ESTABLISHED 13546/ssh
tcp 0 0 172.17.8.76:53463 172.17.85.49:22 ESTABLISHED 28801/ssh
tcp 0 0 172.17.8.76:57385 172.19.230.85:22 ESTABLISHED 5208/ssh
If you want to see, say, all the ssh processes:
dsm@dali:~$ netstat -apn | grep ssh
tcp 0 0 172.17.8.76:43003 172.19.235.82:22 ESTABLISHED 4305/ssh
tcp 0 0 172.17.8.76:32852 198.200.144.106:22 ESTABLISHED 13523/ssh
tcp 0 0 172.17.8.76:44173 198.200.144.106:22 ESTABLISHED 13546/ssh
tcp 0 0 172.17.8.76:53463 172.17.85.49:22 ESTABLISHED 28801/ssh
tcp 0 0 172.17.8.76:57385 172.19.230.85:22 ESTABLISHED 5208/ssh
tcp 0 0 172.17.8.76:58116 172.19.220.114:22 ESTABLISHED 5459/ssh
etc...
On Solaris… On SUN’s Solaris there isn’t an easy way to accomplish the same. On a normal non-containerized server you can run netstat and then lsof…
Assume that you know there is a process conflict – some process has already bound to a port 8083. Your process fails because it can’t bind to the port it needs, that port is already in use – somewhere.
netstat –an | grep 8083 gives you:
[dsm@sun1 bin] $ netstat -an | grep 8083
198.200.144.14.8083 *.* 0 0 49152 0 LISTEN
198.200.144.30.8083 *.* 0 0 49152 0 LISTEN
198.200.144.17.8083 *.* 0 0 49152 0 LISTEN
*.8083 *.* 0 0 49152 0 LISTEN
198.200.144.90.8083 *.* 0 0 49152 0 LISTEN
198.200.144.10.8083 *.* 0 0 49152 0 LISTEN
The *.8083 is our problem child, but we don’t have which process is bound to that port yet.
[dsm@sun1 bin] $ lsof -i:8083
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1548 jb-1 18u IPv4 0x3005df7be68 0t0 TCP s1q:8083 (LISTEN)
java 6903 appadmin 5u IPv4 0x30070580ae8 0t0 TCP *:8083 (LISTEN)
java 7497 jb-2 9u IPv4 0x300099344d0 0t0 TCP webq1:8083 (LISTEN)
java 7989 jb-3 9u IPv4 0x32af1cd79a8 0t0 TCP ntumq1:8083 (LISTEN)
java 9445 jb-ty 9u IPv4 0x30009925e30 0t0 TCP tyq1:8083 (LISTEN)
java 16369 jb-jun 9u IPv4 0x3007b9a21f0 0t0 TCP rjq1:8083 (LISTEN)
[dsm@sun1 bin] $
Process id 6903 if the villian of this piece in this case.
And this works on servers, but not within containerized servers… On a container you get:
$ lsof -i :8083
lsof: can't stat(/devices): No such file or directory
Basically, a zone within a Solaris10 global zone doesn’t have a /devices directory; so you can’t ! You have to do this from the global zone – not ideal
— dsm
heinlein’s solution to handling mail
Posted on September 10th, 2008 by doug. Filed under writers.
Robert Heinlein answered fan mail with a form letter (article by Kevin Kelly; he found an actual copy of the form letter in his own files), sometimes an index card, up until around the early 1980’s. Virginia Heinlein made a comment about the form letter she and Robert used to reply to fan mail in “Grumbles from the Grave”. There are references here and there to an index card form of it as well. The actual form letter itself I had never seen.
I hadn’t thought about it – that there would, of course, be hundreds, perhaps thousands of these letters scattered about in file cabinets. It’s a great find. Thousands of links across the internet to it today, perhaps gone tomorrow.
I think of a dusty Colorado road leading up to the Heinlein’s place in the 1960’s. A mailbox stuffed with a ragged collection of envelopes, out at the end of the drive, the house up over the hill. Barbed wire fences. Weeds and tall grass.
Reading the answers in the form letter, guessing the questions asked or requests made that would cause any of them to be checked off and sent as a response, is a lot of fun. There is a tremendous shortage of new work from the Master, since his death.
For Us the Living wasn’t great Heinlein, but it was worth reading if nothing else as the origin for Future History.
Variable Star had echos of Robert Heinlein in the plotting and the initial characterizations, but it’s Spider Robinson’s voice in the writing.
This form letter has all the original Heinlein voice, the warmth and eloquence and clear language. It’s a hell of a find, just for the pleasure of reading Heinlein again.
In one selection, Heinlein refers the letter writer to an essay:
“( ) Essay, Mental Telepathy, Mark Twain’s Works, Harper & Brother.”
There doesn’t seem to a be a copy of the actual essay – but I found a review of a book containing Mark Twain’s essays on Mental Telepathy:
“…Twain’s interest in travel by thoughts or between minds is not as famous. Considered in two similarly titled essays, Twain’s mental telegraphy, resembling telepathy, influences thoughts and actions of others. Not having heard from someone, Twain writes that person and, while writing, he concentrates on that person, then destroys the letter, and shortly receives one from the person. The concentration linking them prompted the other to write. In this manner, he believed minds could communicate over wide distances. A visual example is Twain’s seeing someone, not present, he later meets dressed as he saw her; her knowledge she would meet him linked their minds. Mental telegraphy explains similarities of Rasselas and Candide, written by contemporaries separated by the English Channel, just as Twain influenced William Wright to write about silver mines when he, in the East, conceived the idea and thought Wright, in the West, the man to do it. The internally-directed concept of a second-self in dreams and, later, other possible dream-selves and lives led Twain deeper into the subject…”
Review, Tales of Wonder by Mark Twain
That could be a response from Heinlein to anything from “You wrote exactly what I was thinking on <insert subject>.” to “Your character <insert character name here> reminds me of my aunt Sarah.”
In another selection, Heinlein makes reference to:
“( ) Renshaw: Saturday Evening Post, You’re Not as Smart as You Could Be, April 17th, 24th and May 1st, 1948″
That article from the Saturday Evening Post is available.
Heinlein made reference to Dr. Samuel Renshaw in “Gulf”, in “Citizen of the Galaxy”, and in “Stranger in a Strange Land”[1]. The Saturday Evening Post article is a detailed explanation of Dr. Renshaw’s work. So… This perhaps is Heinlein’s response to a question about Renshaw, and an “Is that the Dr. Renshaw you meant in your book <insert title of book>?”
Or it could be a reference to the writer of the letter’s personal failure to reach his or her potential…
With Robert Heinlein, it could be either, depending on the circumstances. You have to wonder if he placed it there to be read as an unchecked reply, rather than ever checked at all.
— dsm
dreamhost.com: linux guys – pretty good so far…
Posted on September 6th, 2008 by doug. Filed under website.
I moved off of hostgator.com last week on Labor Day. I chose dreamhost.com as the next hosting facility. I’m really going to try and stay for at least a year in one facility, even though moving only takes a couple of hours now, plus time for DNS to point to the new nameservers.
Dreamhost has a single plan, to which you can add. So we start with the basic plan for one year ($9.95/month, plus a wordpress discount, roughly $110), add two single IPs (not guaranteed to stay the SAME ip, but configured as unique to the site, $3.95/month for a year, roughly $44 each per year), configure SSL (no charge). And I have exactly what I would hope to have. At a cost of $198/year. $16.50/month. That’s a bit more than I would have hoped, but workable.
hostgator would have charged either $28.95/month (one reseller hosting plan, plus two ip addresses at $2/month each, and that doesn’t count the two SSL certs at $10/each install fee…), or $23.90/month (two separate accounts, $9.95/each, plus IP for each, $2/month…), to achieve this.
hostgator technical support was much more formal, and with the Live Chat feature, very responsive. At least they were up until I refused to solve a problem by upgrading my plan. They were constrained by marketing and administrative limits, but technically not bad.
dreamhost’s support ticketing system really doesn’t ticket. It assigns a number to each individual communication to support rather than gathering them into a single issue. I don’t like it. For me as a user, it is too informal, too easy to fail to get a quick communication response back. It may do some grouping that users can’t see internally, not sure.
The first night in the facility the (new) server I was on ran out of root filesystem space and needed to be rebooted to reconfigure space and resolve. This caused issues with WordPress from the admin point of view, but except for downtime during the reboot was likely invisible to traffic to the site.
When dougmunsinger.com was moved to an individual IP address, the apache config was missed and I got the “It works!” default apache testing page – five minutes after sending in a support request it was corrected. But there was no communication back from support on this issue, they just fixed it.
My overall impression is the support guys are linux-oriented, they run Debian Etch as the current version, and if the site stays accessible, reasonably fast and accumulates uptime, I can live with this situation. I am currently having an argument with support over some settings in apache that I believe are non-optimum. Discussion might be more accurate. Not critical, I have at least a temporary workaround in place, but, the server is tuned incorrectly at a default setting… IMHO.
I am watching my domain registrar in France, though – they have been Beta-testing a xen hosting solution, which if it pans out and remains reasonable in cost, would give me full control over the (virtual)s server, and that, frankly, would be ideal.
In the support form for submission to dreamhost.com, there is a drop down to indicate your expertise level as a user:
- “Please explain everything to me very carefully”
- “I do know some stuff but please don’t assume too much”
- “Overall I know my stuff, but I’m a little shaky in this area”
- “I have a good understanding of this stuff”
- “Not to be rude, but I probably know more about this than you”
That last is most likely to be true at the first level and even second level support people reading the support message from me. I don’t necessarily think it would be true at third level support – there should be testing data, network data, tcpdump, etc., traffic monitoring, OS configuration data, behavior on the hardware they run on, knowledge of the network design – all of that argues that at third level I do not know more than they do about their OS and system behaviors.
Having root on the server, even a virtual server, and better control of the whole setup would be more comfortable for me than blind user land. We’ll see where the beta testing at Gandi goes…
— dsm
recent posts
- home to Boston, daughter in remission
- visually healthy bone marrow…
- matter of the lungs
- Fall through code to a success…
- another tool for SVN – list_repositories.pl
- svnadmin.pl – perl cgi script to manage svn over apache
- testing Crosspress (plugin)…
- subversion compile and install as non-privileged user…
What I'm Doing...
- flying back to Boston tomorrow, and watching my daughter come off a ventilator and breathe on her own... 1 week ago
- writing a startup and shutdown sc ript for all of jboss-land 2009-08-25
- finished and deployed svnadmin.pl cgi, documented it and checked into subversion... next is more log4j edits, and deploy jsvn (java svn) 2009-05-08
- More updates...
Posting tweet...
























