Revision as of 01:05, 3 July 2008 by King0770 (talk | contribs)

Removing Messages with Zmmailbox based on the Subject

# subject
if [ -z "$2" ]; then
echo "usage: <subject>"
exit 0
echo "Searching $addr  for Subject:  $subject"
for msg in `zmmailbox -z -m "$addr" s -l 999 -t message "subject:$subject"|awk '{ if (NR!=1) {print}}' | grep -v -e Id -e "-" -e "^$" | awk '{ print $2 }'`
echo "Removing "$msg""
zmmailbox -z -m $1 dm $msg

Copy/Paste the script into a file, call it what you want, something like, "". The syntax using the script would be something like:

./ subjectName

If the subject contains more than one word, put double quotes around the subject.

./ "Hello World"

Special thanks to Matt Fox.

Reinitialize the Logger DB

Worst case scenario for the logger db's: If some for reason the USE_FRM option fails, you could move the old logger db out of the way and start over. The only bad part is that you would lose historical data, however it would resolve the corrupted table issue(s).

If you wish the start over with the logger db's, here are the steps (run as zimbra).

$ zmloggerctl stop
$ mv /opt/zimbra/logger/db /opt/zimbra/logger/db-old
$ source /opt/zimbra/bin/zmshutil 
$ zmsetvars 
$ /opt/zimbra/libexec/zmloggerinit ${mysql_logger_root_password}
$ zmlogswatchctl start

Spam Info

If you haven't already, try implementing the use of RBL's. This is from:

su - zimbra

zmprov mcf \
zimbraMtaRestriction reject_invalid_hostname \
zimbraMtaRestriction reject_non_fqdn_hostname \
zimbraMtaRestriction reject_non_fqdn_sender \
zimbraMtaRestriction "reject_rbl_client" \
zimbraMtaRestriction "reject_rbl_client" \
zimbraMtaRestriction "reject_rbl_client" \
zimbraMtaRestriction "reject_rbl_client" \
zimbraMtaRestriction "reject_rbl_client" \
zimbraMtaRestriction "reject_rbl_client" 

zmmtactl reload
**don't forget to reload Postfix**

RBL's will usually cut 50% of unwanted mail flow off the top before scanning for spam.

You can also decrease kill and tag percentages, have a look what they are at now. Basically, the lower the numbers, the more aggressive a potential spam will be tagged; I believe we ship with those numbers a little high.

zmprov gacf | grep -e zimbraSpamTagPercent -e zimbraSpamKillPercent

If you decide to adjust zimbraSpamTagPercent & zimbraSpamKillPercent, don't forget to run this command:

zmamavisdctl restart

With the RBL's in place, with a lower threshold, wait for a couple of days, see what the spam traffic is like then.

License - Misc

TTL for the account count cache is either 1 minute when they are very close to the limit, or 1 hour if the total account count is less than 90% of the quota. In other words, the server will correct itself without restart in an hour in the worse case. See

  • Admin counts towards user count,
  • Spam, Ham, Wiki accounts don't count toward user count total

Preferred Method Moving Users To New Machine

I believe the best method to transfer users from one ZCS machine to another ZCS machine would be to use the "move mailbox" method. The concept behind the move mailbox method is that the user's account is transferred from one host to another keeping their data intact, i.e. mail, contacts, and calendar. It will move accounts one at a time, and the account being moved will only be inaccessible for the duration of the move. Basically, you would make the new server to be an ldap replica to the old server; configure the old server to be the ldap master on the new server. Once you have moved all of the accounts to the new server/replica, promote the replica to be the master, documentation on promoting the replica to master is here: The move mailbox function can be accomplished by using the Admin Console, or by CLI. In the Admin Console, there is a button labeled "move mailbox" when you edit an account. From the CLI, here is an article detailing the zmmailboxmove,

This is King0770's personal opinion, not Zimbra's official position.


This would be a good place to start.

This url is good, however, this article is referring configuring a replica during zcs install.

Handy Commands

Read the install history file in a readable format

perl -e 'while (<>) { ($date, $op) = split(/:/, $_); print scalar localtime($date) . "  " . $op; }' < /opt/zimbra/.install_history

Get the version in ZWC

Type the following in the search bar:

$set: get version

LDAP - DB Status

/opt/zimbra/sleepycat/bin/db_stat -c -h /opt/zimbra/openldap-data

LDAP - DB Recover

/opt/zimbra/sleepycat/bin/db_recover **make sure you are doing this as the zimbra user, and that slapd is not running**

LDAP - Slapindex

/opt/zimbra/openldap/sbin/slapindex -f /opt/zimbra/conf/slapd.conf

LDAP - Export & Reimport

1) su - zimbra
2) libexec/zmslapcat /tmp
3) mv /tmp/ldap.bak /tmp/ldap.ldif
4) zmcontrol stop
5) ps -aux | grep slapd **If ldap is still running, kill it**
6) su - root
7) mv /opt/zimbra/openldap-data /opt/zimbra/openldap-data.OLD
8) mkdir -p /opt/zimbra/openldap-data/logs
9) chown -R zimbra:zimbra /opt/zimbra/openldap-data/
10) su - zimbra
11) /opt/zimbra/openldap/sbin/slapadd -f /opt/zimbra/conf/slapd.conf -l /tmp/ldap.ldif 
12) zmcontrol start

Excessive Load Info Needed - What you need to show Zimbra Support

In general, when troubleshooting performance issues, we would like to know the following:

  • 1. What exactly is slow?
  • 2. Timestamps when problem is observed
  • 3. Repro steps, if applicable
  • 4. When the problem occurs, generate a few threaddumps (30 seconds apart) and send us zmmailboxd.out:
  • 5. generate zmstat charts covering the times when the problem occurs

There are a few commands you can run to help us diagnose; the only stipulation is to run these commands *during* the excessive high load. We'll need to see what's going on during the high load.

1) Run the following command *during* the high load, run this command as root. This should write the output to the /opt/zimbra/log/zmmailboxd.out file.

for i in 1 2 3; do /opt/zimbra/libexec/zmmailboxdmgr threaddump; sleep 30; done

2) On the day of the excessive high load, we'll need you to generate graphs; this will help the engineers see any problems. Run as the zimbra user

zmstat-chart -s /opt/zimbra/zmstat/<day of the excessive load> -d /tmp/zmstats
tar -czvf /tmp/zmstats.tar.gz /tmp/zmstats

3) Find out the PID of the jetty process and run pstack on it, send us the results from the pstack command. Please run this command during the excessive load.

ps -ef | grep jetty
pstack <jetty_pid>

Sometime, Zimbra engineers need to know as much as possible about your machine in these types of excessive load situations. Using the script below could be helpful - no such thing as too much info. :)


if [ `whoami` != "zimbra" ]; then
echo "Must be executed as the zimbra user."
exit 1
zmcontrol -v

echo "Number of users"
echo "---------------"
zmprov gaa | wc -l


echo "Processor Version"
echo "-----------------"
PROC_VER=`cat /proc/version`
echo "$PROC_VER"


echo "Processor Info"
echo "--------------"
PROC_INFO=`cat /proc/cpuinfo`
echo "$PROC_INFO"

echo "Mem Info"
echo "--------"
FREE=`free -m`
echo "$FREE"
echo "`dmesg | grep Mem`"


echo "FSTAB File"
echo "----------"
echo "`cat /etc/fstab`"


echo "Mtab file"
echo "---------"
echo "`cat /etc/mtab`"


echo "Disk Space"
echo "----------"
echo "`df -h`"


echo "Threads"
echo "-------"
zmprov gacf | grep -i threads
echo "Message Cache Size"
echo "------------------"
zmprov gacf | grep zimbraMessageCacheSize
echo "Info from zmlocalconfig"
echo "-----------------------"
zmlocalconfig -d | grep java_options
zmlocalconfig -n | grep maxActive
zmlocalconfig | grep max_uncommitted_operations
zmlocalconfig | grep percent

echo "Mysql Info"
echo "----------"
grep max_connections /opt/zimbra/conf/my.cnf
grep innodb_buffer_pool_size  /opt/zimbra/conf/my.cnf
grep innodb_max_dirty_pages_pct  /opt/zimbra/conf/my.cnf
grep innodb_flush_method  /opt/zimbra/conf/my.cnf


echo "Java Process"
echo "------------"
ps -ef | grep java


echo "LDAP Info"
echo "---------"
/opt/zimbra/sleepycat/bin/db_stat -m -h /opt/zimbra/openldap-data | head -n 11


/opt/zimbra/sleepycat/bin/db_stat -m -h /opt/zimbra/openldap-data | head -n 12
Jump to: navigation, search