Thursday Mar 29, 2007

Some thoughts at X4500 (Thumper) for a Messaging Server

Sun's much touted Thumper (Sun Fire x4500) is billed as a "Data Center in Box." Even with that hype, there is a lot of reality in this claim. They take a system with two dual-core AMD Opteron (Model 285) and bolt on an incredible amount of storage. The storage is 48 hot-swappable SATA II HDD (500 GB Each) with a totally availability of 24 terabytes of storage.

My thoughts are that this might actually work as a great Message Store server. Our Messaging Server is nearly dependent on Disk I/O. The Disk i/o pathways to these drives are spread out over six SATA controllers, so Disk i/o isn't really a concern. I can actually see this server meeting the needs of an enterprise with 500-2000 employees. Giving them services to Email via IMAP and SMTP. Calendar services could also be installed, but I'm less hesitant to include Communications Express on a single box.

The big concern comes with availability. Although the x4500 has redundancy built in, it is always best to spread your data to two or more storage arrays. The single internal array would violate this availability requirement. I'm sure that the PCI-X slot could be taken by a FDDI card to give SAN access to an external store. There are some sites that may not want to op for this type of redundant requirement, and so the Thumper would be a good solution for them.

I would be really happy if I could get my hands on one of these for a few months. (hint hint Sun Marketing)

Some ideas for this box:
1. Email Store
2. Communications Server for less than 500 users.
3. VoIP or Voice Mail Server

Friday Mar 16, 2007

Performance Tuning for Communications Express Address Book

Russ Petruzzelli has been working in the lab on tests of our Communications Express 6.2 product. I've been helping him write up his results of his performance tests. I thought it would be beneficial to leak out our findings for a preferred set of settings for performance tuning.

Key Findings:
1. Upgrade the JVM to JDK 1.5_06 or later
2. Turn off Gunzip Settings

1 Solaris System Tuning Values

1.1 /etc/system (all machines)

All systems were on Solaris 10. The default settings are adequate. No tuning required.

1.2 TCP Parameters

tcp_time_wait_interval 30000
tcp_fin_wait_2_flush_interval 37500
tcp_conn_req_max_q 8192
tcp_conn_req_max_q0 8192
tcp_keepalive_interval 180000
tcp_rexmit_interval_initial 500
tcp_rexmit_interval_min 3000
tcp_rexmit_interval_max 6000
tcp_smallest_anon_port 1024
tcp_slow_start_initial 2
tcp_xmit_hiwat 65536
tcp_recv_hiwat 65536
tcp_ip_abort_interval 180000
tcp_ip_abort_cinterval 10000
tcp_deferred_ack_interval 5
tcp_strong_iss 2

2. Java & Web Server Tuning Values

2.1 Webserver Java Virtual Machine (JVM) options


2.3. Webserver magnus.conf

RqThrottle 256
StackSize 393216
ThreadIncrement 16
ConnQueueSize 4096
ListenQ 4096
KeepAliveThreads 8
KeepAliveTimeout 30
MaxKeepAliveConnections 512
#Init fn="init-passthrough"
UseNativePoll off

2.4. Java Version Upgrade

Move the /usr/java symbolic link to release 10 of Java Standard Edition 5.

/usr/java -> jdk1.5.0_10/

2.5 Webserver Performance Monitoring Activation (.perf output)

1. Inside default object (must be first two lines in the object):

NameTrans fn=assign-name from="/.perf" name="perf"
NameTrans fn="assign-name" name="stats-xml" from="(/stats-xml|/stats-xml/\*)"

2. Immediately after default object:
<Object name="perf">
Service fn="service-dump"

3. enable statistics in the webserver console or make entries

4. in the magnus.conf:

vi magnus.conf (place anywhere in the file)

Init fn="stats-init" profiling="on"

3 Directory Server Tuning

3.1 dse.ldif modifications

dn: cn=config,cn=ldbm database,cn=plugins,cn=config
nsslapd-dbcachesize: 1048576000
nsslapd-import-cachesize: 20971520
nsslapd-db-home-directory: /tmp/slapd-ps-eng6-zone2/db
nsslapd-maxthreadsperconn: 20

dn: cn=piserverdb, cn=ldbm database, cn=plugins, cn=config
nsslapd-cachememsize: 2048000000

dn: cn=config
nsslapd-accesslog-logging-enabled: on
nsslapd-accesslog-level: 131328
(see Directory Server Reference Manual: Chapter 4 "Core Server Configuration Attributes.")

4 Communications Express Tuning

4.1 Authentication LDAP Settings


ldapusersession.ldappoolmin = 10
ldapusersession.ldappoolmax = 5000
ldapusersession.ldappooltimeout =30
ldapusersession.ldappoolrefresh =15

4.2. LDAP Store Settings



Note: These are not recommended or optimum settings. As one goal of
this testing was to reproduce the load seen in the customer's environment. Thus these settings were "played around with" to try and
see performance deficiencies and improvements.

4.3. /var/opt/SUNWuwc/WEB-INF/web.xml


Technorati Tags: , , , ,

Thursday Feb 22, 2007

Solaris 10 : Mounting an ISO Image over the wire

Today, I was presented with the problem of mounting an ISO image to a system which I didn't have physical access. My first thought was to download the ISO image to my Mac and then burn a DVD from that image. I would then need to get into the car and drive to the office, hope I still have lab access, and then load that DVD into the drive. Given that I'm home today, I thought I'd let my fingers do the walking..

# lofiadm -a /path/to/iso/image/dvd.iso
# mkdir /export/isomnt
# mount -o ro -F hsfs -o ro /dev/lofi/1 /export/isomnt
# cd /export/isomnt

Keep in mind that this will work if you are using Solaris and the CD/DVD that you are mounting is a hsfs filesystem.

Technorati Tags:

Sunday Nov 19, 2006

Burning Solaris 10 ISO DVD using a Mac

Things are ramping up till the end of the year.   During the first week of December,  I am giving a Communications Express Boot Camp in Singapore.  This will be the first one in what I hope will be a series of small boot camps to be held around the globe.  Our big Communications Software Summit will be held at the Sun Santa Clara Campus in February 2007.

Part of the setup for teaching a class like this is the time it takes to setup the lab.  In previous classes, I've placed everything on a CD, and then I would hope that everything would go as planned on the install.  More times than not, it wouldn't work out as planned.  This got me thinking of doing this a better way.

On Friday morning, I thought it would be easier to to put my whole lab setup on a laptop.  I had no idea how difficult it would be so, I thought I would just do a test installation.  In my desk, I had a Sun issued Toshiba Tecra M2 which was left over from my pre-Mac days. This laptop had too many issues for me to get into.  The biggest of which was a 3 inch wide swath of dead pixels and a questionable hard drive.  It wasn't likely that Sun would give me a another laptop to do this, so I had to make it work on this one.

My first step was to download the Solaris 10 ISO image.  Many of you non-Sun Folks can do this for free.  You can try the commercial Solaris or the Open Solaris versions. 

A Mac is really handy in .  After I downloaded the ISO image, I placed it on my Mac Desktop.  Then I opened the Finder to start the DiskUtilities application.

Image showing location of the DiskUtilities in the MacOS Finder

Once I got DiskUtilities started, I simply go to the menu and select File -> Open Image. 

Selecting the Solaris 10 ISO image file.

I then just select the ISO Image.. this will mount the ISO image.

Solaris 10 ISO Image is now mounted and ready to Burn.

At this point, just click burn and place a DVD-R into the CD/DVD drive.

At this point, I just take the newly created Solaris 10 x86 DVD and place it into my Toshiba laptop and boot! 

Sunday Oct 15, 2006

Solaris 10 LiveUpdate to a Disk Partition

At some point, you may want to "capture" an existing installation of Solaris 10.  One feature of Solaris that I found useful is the LiveUpdate functionality.  This allows you to create a backup image of one or more partitions.  It then keeps track of the locations should you need to boot that backup image state.

This is really useful for several reasons.  First, you may want to capture the installed state of a given system.  Should something go wrong, for example add a bad patch, you could just boot back to that given state. 

In the case below, I am formatting a local disk to be my backup disk.  I'm running the format utility to repartition the drive to have a single partition (also known as a "free hog") for the whole spindle.
# format -e
select disk 2
modify: set slice 6 to free hog.. the rest set to zero GB

Next.. I'm adding a UFS file system to that spindle. We will need this because the lucreate will need to run "cpio".
# newfs /dev/dsk/c1t1d0s6
newfs: construct a new file system /dev/rdsk/c1t1d0s6: (y/n)? y
Warning: 2496 sector(s) in last cylinder unallocated
/dev/rdsk/c1t1d0s6:     143349312 sectors in 23332 cylinders of 48 tracks, 128 sectors
        69994.8MB in 1459 cyl groups (16 c/g, 48.00MB/g, 5824 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
 32, 98464, 196896, 295328, 393760, 492192, 590624, 689056, 787488, 885920,
Initializing cylinder groups:
super-block backups for last 10 cylinder groups at:
 142447776, 142546208, 142644640, 142743072, 142841504, 142939936, 143038368,
 143136800, 143235232, 143333664

The final step.. the LiveUpdate itself. In this case, I'm copying the whole "/" partition onto my newly created disk "
/dev/dsk/c1t1d0s6".  This will do the copy on to the new disk.  I'm also specifying that the target will support UFS.  And the final "-n" will place a label for my boot parameter "newbootenv".
# lucreate -n newbootenv -m /:/dev/dsk/c1t1d0s6:ufs

Discovering physical storage devices
Discovering logical storage devices
Cross referencing storage devices with boot environment configurations
Determining types of file systems supported
Validating file system requests
Preparing logical storage devices
Preparing physical storage devices
Configuring physical storage devices
Configuring logical storage devices
Analyzing system configuration.
No name for current boot environment.
INFORMATION: The current boot environment is not named - assigning name <c1t0d0s0>.
Current boot environment is named <c1t0d0s0>.
Creating initial configuration for primary boot environment <c1t0d0s0>.
The device </dev/dsk/c1t0d0s0> is not a root device for any boot environment.
PBE configuration successful: PBE name <c1t0d0s0> PBE Boot Device </dev/dsk/c1t0d0s0>.
Comparing source boot environment <c1t0d0s0> file systems with the file 
system(s) you specified for the new boot environment. Determining which 
file systems should be in the new boot environment.
Updating boot environment description database on all BEs.
Searching /dev for possible boot environment filesystem devices
Updating system configuration files.
The device </dev/dsk/c1t1d0s6> is not a root device for any boot environment.
Creating configuration for boot environment <newbootenv>.
Source boot environment is <c1t0d0s0>.
Creating boot environment <newbootenv>.
Creating file systems on boot environment <newbootenv>.
Creating <ufs> file system for </> on </dev/dsk/c1t1d0s6>.
Mounting file systems for boot environment <newbootenv>.
Calculating required sizes of file systems for boot environment <newbootenv>.
Populating file systems on boot environment <newbootenv>.
Checking selection integrity.
Integrity check OK.
Populating contents of mount point </>.

Thursday Aug 03, 2006

Solaris Container Trick #1 : Monitoring Users Processes

Here is a simple little trick that will give Solaris 10 Admins a bit
more control over monitoring their system processes in each zone.  One
"feature" of Solaris Containers is that the namespace seems to be
consistant globally across all zones.  This means that the userid #
which gets assigned when you create a user with the "-u" option is
visible on the Global Zone.  Keep in mind in the non-global zones,
these users are not visible. (read more)

[Read More]

I'll be writing about topics that would interest users and developers of Sun Java Communication Suite.


« April 2014