Re: Multi-thread cyrus delayed forking of imapd processes after connecting to master listener

2017-05-23 Thread Michael Hieb
I set maxforkrate=100 to make to raise it well above a default. 100 a 
second is quite a lot and logs show I am no where near that many 
connections.


I am not sure if I can define the maxforkrate parameter so that it is 
unlimited (for testing) so I just set it at a number well above what I 
see the server trying to do.


I tried prefork and found it did not help the problem, most of the 
prefork sessions also had the wait condition.


Michael

On 05/24/2017 03:11 AM, Scott Lambert wrote:

I may be completely missing the point and I don't know your environment.
It looks like you may have designed in some delays if the server is
pretty busy, especially during restart.

On Fri, May 19, 2017 at 05:55:32PM +0800, Michael Hieb wrote:

Here are the configuration details:

imap cmd="imapd -C /etc/imapd.domain1.com.conf "
listen="192.168.171.4:imap" maxchild=-1 maxforkrate=100

imaps cmd="imapd -C /etc/imapd.domain1.com.conf -s "
listen="192.168.171.4:imaps" maxchild=-1 maxforkrate=100

maxforkrate will limit you to 100 forks per second.  That's quite a lot
but between bad guys and reconnects of clients after a restart, that may
be limiting.  I'm not sure I understand maxforkrate without a maxchild
limit.  That's probably a lack of imagination on my part.

Maybe it would be good to prefork a few instances of each service?




Cyrus Home Page: http://www.cyrusimap.org/
List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
To Unsubscribe:
https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus


Re: Multi-thread cyrus delayed forking of imapd processes after connecting to master listener

2017-05-23 Thread Michael Hieb
uot;lmtpd -a" listen="mail.domain1.com:lmtp" maxchild=-1
maxforkrate=100
lmtp cmd="lmtpd -a" listen="mail.domain2.com:lmtp" maxchild=-1
maxforkrate=100
lmtp cmd="lmtpd -a" listen="mail.domain3.com:lmtp" maxchild=-1
maxforkrate=100
lmtp cmd="lmtpd -a" listen="mail.domain4.com:lmtp" maxchild=-1
maxforkrate=100
lmtp cmd="lmtpd -a" listen="mail.domain5.com:lmtp" maxchild=-1
maxforkrate=100
lmtp cmd="lmtpd -a" listen="mail.domain6.com:lmtp" maxchild=-1
maxforkrate=100
#lmtpunix cmd="lmtpd" listen="/var/lib/imap/socket/lmtp"

# this is only necessary if using notifications
#notify cmd="notifyd" listen="/var/lib/imap/socket/notify" proto="udp"
}

EVENTS {
# this is required
checkpoint cmd="ctl_cyrusdb -c" period=30

# this is only necessary if using duplicate delivery suppression,
# Sieve or NNTP
duplicateprune cmd="cyr_expire -E 3" at=0400

# Expire data older then 69 days. Two full months of 31 days
# each includes two full backup cycles, plus 1 week margin
# because we run our full backups on the first sat/sun night
# of each month.
deleteprune cmd="cyr_expire -E 4 -D 69" at=0430
expungeprune cmd="cyr_expire -E 4 -X 69" at=0445

# this is only necessary if caching TLS sessions
tlsprune cmd="tls_prune" at=0400

# Uncomment the next entry, if you want to automatically remove
# old messages of EVERY user.
# This example calls ipurge every 60 minutes and ipurge will delete
# ALL messages older then 120 days.
# enter 'man 8 ipurge' for more details
#cleanup cmd="ipurge -d 120 -f" period=60
cleanup cmd="ipurge -f -d 30 user/%/Spam*@domain1.com" period=60
cleanup cmd="ipurge -f -d 30 user/%/Spam*@domain2.com" period=60
cleanup cmd="ipurge -f -d 30 user/%/Spam*@domain3.com" period=60
cleanup cmd="ipurge -f -d 30 user/%/Spam*@domain4.com" period=60
cleanup cmd="ipurge -f -d 30 user/%/Spam*@domain5.com" period=60
cleanup cmd="ipurge -f -d 30 user/%/Spam*@domain6.com" period=60

cleanup cmd="ipurge -f -d 30 user/%/Trash*@domain1.com" period=60
cleanup cmd="ipurge -f -d 30 user/%/Trash*@domain2.com" period=60
cleanup cmd="ipurge -f -d 30 user/%/Trash*@domain3.com" period=60
cleanup cmd="ipurge -f -d 30 user/%/Trash*@domain4.com" period=60
cleanup cmd="ipurge -f -d 30 user/%/Trash*@domain5.com" period=60
cleanup cmd="ipurge -f -d 30 user/%/Trash*@domain6.com" period=60

cleanup cmd="ipurge -f -d 60 user/%/Sent*@domain1.com" period=60
cleanup cmd="ipurge -f -d 60 user/%/Sent*@domain2.com" period=60
cleanup cmd="ipurge -f -d 60 user/%/Sent*@domain3.com" period=60
cleanup cmd="ipurge -f -d 60 user/%/Sent*@domain4.com" period=60
cleanup cmd="ipurge -f -d 60 user/%/Sent*@domain5.com" period=60
cleanup cmd="ipurge -f -d 60 user/%/Sent*@domain6.com" period=60

# Create search indexes regularly
squatter cmd="squatter -s -i" at=0530

# running sa-learn
sa-learn cmd="/usr/local/bin/cyrus-salearn.pl" period=60
sa-update cmd="/usr/bin/sa-update -v" at=

}

MAILSERVER:~ # cat /etc/imapd.domain1.com.conf
configdirectory: /var/lib/imap
partition-default: /var/spool/imap
sievedir: /var/lib/sieve
annotation_definitions: /etc/imapd.annotations.conf
# admins: cy...@domain1.net
allowanonymouslogin: no
autocreatequota: 1
reject8bit: no
quotawarn: 90
timeout: 30
poptimeout: 10
dracinterval: 0
drachost: localhost
sasl_pwcheck_method: saslauthd
lmtp_overquota_perm_failure: no
#lmtp_catchall_mailbox: admin
lmtp_downcase_rcpt: yes
lmtp_fuzzy_mailbox_match: yes
expunge_mode: delayed
deletedprefix: DELETED
delete_mode: delayed

# added by Michael Hieb Jun 22 2014
allowplaintext: yes
unixhierarchysep: yes
allowplainwithouttls: no
altnamespace: no
virtdomains: userid
servername: imap.domain1.net

#
# if you want TLS, you have to generate certificates and keys
#
tls_cert_file: /etc/letsencrypt/live/imap.domain1.net/cert.pem
tls_key_file: /etc/letsencrypt/live/imap.domain1.net/privkey.pem
tls_ca_file: /etc/letsencrypt/live/imap.domain1.net/chain.pem
tls_ca_path: /etc/ssl/certs
tls_versions: tls1_0 tls1_1 tls1_2

# added by Michael Hieb 20-Jan-2017 for lmtp on port (not socket)
lmtp_admins: lmtpuser
MAILSERVER:~ #

Note: before I discovered the problem with forking could be triggered by
switching between single threaded and multi-threaded cyrus server, I
thought problem could be related to resource constraints. This is why I
set all processes with maxchild=-1 maxforkrate=100. I also set the
following in /etc/systemd/system/cyrus.service

MAILSERVER:~ # cat /etc/systemd/system/cyrus.service
[deleted...]
LimitRTPRIO=5
LimitNOFILE=5
LimitNPROC=5
MAILSERVER:~ #

None of these resource settings made any difference and the problem goes
away as soon as cyrus is single threaded - so I do not believe it is a
resource constraint (at least one I understand at this point).

Any help would be much appreciated.




Cyrus Home Page: http://www.cyrusimap.org/
List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
To Unsubscribe:
https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus


Cyrus Home Page: http://www.cyrusimap.org/
List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
To Unsubscribe:
https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus


-- next part --
A non-text attachment was scrubbed...
Name: boutilpj.vcf
Type: text/x-vcard
Size: 286 bytes
Desc: not available
URL: 
<http://lists.andrew.cmu.edu/pipermail/info-cyrus/attachments/20170523/c8f3d992/attachment.vcf>





Cyrus Home Page: http://www.cyrusimap.org/
List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
To Unsubscribe:
https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus


Re: Multi-thread cyrus delayed forking of imapd processes after connecting to master listener

2017-05-23 Thread Michael Hieb
I have had good success connecting to the right process and can 
replicate the result. Here is what I found;


MAILSERVER:~ # ps auwwx|grep imapd
cyrus 1738  0.0  0.0 119572 10140 ?S03:32   0:00 imapd 
-C /etc/imapd.domain1.com.conf -s
cyrus 1745  0.0  0.0 119580  9812 ?S03:32   0:00 imapd 
-C /etc/imapd.domain2.com.conf -s
cyrus 1749  0.0  0.0 119596  9856 ?S03:32   0:00 imapd 
-C /etc/imapd.domain3.com.conf
cyrus 1750  0.0  0.0 129424 11500 ?S03:32   0:00 imapd 
-C /etc/imapd.domain1.com.conf
cyrus 1751  0.0  0.0 119696  9988 ?S03:32   0:00 imapd 
-C /etc/imapd.domain5.com.conf
cyrus 1752  0.0  0.0 119596  9816 ?S03:32   0:00 imapd 
-C /etc/imapd.domain4.com.conf
cyrus 1753  0.0  0.0 119604  9964 ?S03:32   0:00 imapd 
-C /etc/imapd.domain3.com.conf
cyrus 1754  0.0  0.0 119596  9652 ?S03:32   0:00 imapd 
-C /etc/imapd.domain1.com.conf
cyrus 1755  0.0  0.0 119596  9800 ?S03:32   0:00 imapd 
-C /etc/imapd.domain5.com.conf
cyrus 1756  0.0  0.0 119604 10056 ?S03:32   0:00 imapd 
-C /etc/imapd.domain4.com.conf
cyrus 1757  0.0  0.0 129564 11724 ?S03:32   0:00 imapd 
-C /etc/imapd.domain1.com.conf
cyrus 1758  0.0  0.0 119512  9896 ?S03:33   0:00 imapd 
-C /etc/imapd.domain1.com.conf -s
cyrus 1766  0.0  0.0 119588  9904 ?S03:33   0:00 imapd 
-C /etc/imapd.domain3.com.conf -s
cyrus 1767  0.0  0.0 119576  9804 ?S03:33   0:00 imapd 
-C /etc/imapd.domain3.com.conf -s
cyrus 1778  0.0  0.0 119480  9936 ?S03:33   0:00 imapd 
-C /etc/imapd.domain1.com.conf -s
cyrus 1786  0.0  0.0 119768 10144 ?S03:33   0:00 imapd 
-C /etc/imapd.domain5.com.conf
cyrus 1881  0.0  0.0 119808 10080 ?S03:34   0:00 imapd 
-C /etc/imapd.domain1.com.conf
cyrus 1912  0.0  0.0 119688  9868 ?S03:36   0:00 imapd 
-C /etc/imapd.domain2.com.conf
cyrus 1937  0.0  0.0 119784 10216 ?S03:38   0:00 imapd 
-C /etc/imapd.domain3.com.conf
cyrus 1947  0.0  0.0 125872 10660 ?S03:39   0:00 imapd 
-C /etc/imapd.domain1.com.conf
cyrus 1993  0.0  0.0 119604  9808 ?S03:42   0:00 imapd 
-C /etc/imapd.domain4.com.conf
cyrus 2078  0.0  0.0 117044  7628 ?S03:48   0:00 imapd 
-C /etc/imapd.domain4.com.conf
root  2080  0.0  0.0  10548  1656 pts/2S+   03:48   0:00 grep 
--color=auto imapd


Then try to connect:

user@somesystem:~> telnet imap.domain2.com 143
Trying 192.168.110.175...
Connected to imap.domain2.com.
Escape character is '^]'.

Then mailserver is the same except one new process at the end:

MAILSERVER:~ # ps auwwx|grep imapd
cyrus 1738  0.0  0.0 119572 10140 ?S03:32   0:00 imapd 
-C /etc/imapd.domain1.com.conf -s
cyrus 1745  0.0  0.0 119580  9812 ?S03:32   0:00 imapd 
-C /etc/imapd.domain2.com.conf -s
cyrus 1749  0.0  0.0 119596  9856 ?S03:32   0:00 imapd 
-C /etc/imapd.domain3.com.conf
cyrus 1750  0.0  0.0 129424 11500 ?S03:32   0:00 imapd 
-C /etc/imapd.domain1.com.conf
cyrus 1751  0.0  0.0 119696  9988 ?S03:32   0:00 imapd 
-C /etc/imapd.domain5.com.conf
cyrus 1752  0.0  0.0 119596  9816 ?S03:32   0:00 imapd 
-C /etc/imapd.domain4.com.conf
cyrus 1753  0.0  0.0 119604  9964 ?S03:32   0:00 imapd 
-C /etc/imapd.domain3.com.conf
cyrus 1754  0.0  0.0 119596  9652 ?S03:32   0:00 imapd 
-C /etc/imapd.domain1.com.conf
cyrus 1755  0.0  0.0 119596  9800 ?S03:32   0:00 imapd 
-C /etc/imapd.domain5.com.conf
cyrus 1756  0.0  0.0 119604 10056 ?S03:32   0:00 imapd 
-C /etc/imapd.domain4.com.conf
cyrus 1757  0.0  0.0 129564 11724 ?S03:32   0:00 imapd 
-C /etc/imapd.domain1.com.conf
cyrus 1758  0.0  0.0 119512  9896 ?S03:33   0:00 imapd 
-C /etc/imapd.domain1.com.conf -s
cyrus 1766  0.0  0.0 119588  9904 ?S03:33   0:00 imapd 
-C /etc/imapd.domain3.com.conf -s
cyrus 1767  0.0  0.0 119576  9804 ?S03:33   0:00 imapd 
-C /etc/imapd.domain3.com.conf -s
cyrus 1778  0.0  0.0 119480  9936 ?S03:33   0:00 imapd 
-C /etc/imapd.domain1.com.conf -s
cyrus 1786  0.0  0.0 119768 10144 ?S03:33   0:00 imapd 
-C /etc/imapd.domain5.com.conf
cyrus 1881  0.0  0.0 119808 10080 ?S03:34   0:00 imapd 
-C /etc/imapd.domain1.com.conf
cyrus 1912  0.0  0.0 119688  9868 ?S03:36   0:00 imapd 
-C /etc/imapd.domain2.com.conf
cyrus 1937  0.0  0.0 119784 10216 ?S03:38   0:00 imapd 
-C /etc/imapd.domain3.com.conf
cyrus 1947  0.0  0.0 125872 10660 ?S03:39   0:00 imapd 
-C /etc/imapd.domain1.com.conf
cyrus 1993  0.0  0.0 119604  9808 ?S03:42   0:00 imapd 
-C /etc/imapd.domain4.com.conf
cyrus 2078  0.0  0.0 117044  7628 ? 

Re: lmtpd segfaults after update to 2.4.19, seems it wants to act as proxy

2017-05-23 Thread ellie timoney
On Mon, May 22, 2017, at 03:55 PM, Simon Matter wrote:
> Hi Ellie,
> 
> Thanks for looking into it.
> 
> Unfortunately with your new version of the patch I only get this:
> 
> lmtpunix[23046]: FATAL: Internal error: assertion failed: append.c: 368:
> stage != NULL && stage->parts[0] != '\0'
> 
> Regards,
> Simon
> 

That's annoying :(  Reproducible, I assume?

If you add a call to "abort();" from early in "void fatal(const char* s,
int code)" in imap/lmtpd.c and rebuild/reinstall, then when that
assertion fires it should dump a core file.  Can you get a backtrace
from that please?

Note that this will bypass the usual clean-shutdown that usually occurs
on fatal errors, and might lead to database corruptions and such.  So
probably don't do this on an important server.

Cheers,

ellie

Cyrus Home Page: http://www.cyrusimap.org/
List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
To Unsubscribe:
https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus


Re: Multi-thread cyrus delayed forking of imapd processes after connecting to master listener

2017-05-23 Thread Blake Hudson


Michael Hieb wrote on 5/19/2017 4:48 AM:

Apologies for long post, most of it is configuration details.

...

# UNIX sockets start with a slash and are put into /var/lib/imap/socket
SERVICES {
# add or remove based on preferences
#imap cmd="imapd" listen="imap" maxchild=-1 maxforkrate=100
imap cmd="imapd -C /etc/imapd.domain1.com.conf " 
listen="192.168.171.4:imap" maxchild=-1 maxforkrate=100
imap cmd="imapd -C /etc/imapd.domain1.com.conf " 
listen="192.168.110.171:imap" maxchild=-1 maxforkrate=100
imap cmd="imapd -C /etc/imapd.domain2.com.conf " 
listen="192.168.172.4:imap" maxchild=-1 maxforkrate=100
imap cmd="imapd -C /etc/imapd.domain2.com.conf " 
listen="192.168.110.172:imap" maxchild=-1 maxforkrate=100
imap cmd="imapd -C /etc/imapd.domain3.com.conf " 
listen="192.168.174.4:imap" maxchild=-1 maxforkrate=100
imap cmd="imapd -C /etc/imapd.domain3.com.conf " 
listen="192.168.110.174:imap" maxchild=-1 maxforkrate=100

...

Michael, each process in Cyrus needs a unique name. Try:

imap1 cmd="imapd -C /etc/imapd.domain1.com.conf " 
listen="192.168.171.4:imap" maxchild=-1 maxforkrate=100
imap2 cmd="imapd -C /etc/imapd.domain1.com.conf " 
listen="192.168.110.171:imap" maxchild=-1 maxforkrate=100
imap3 cmd="imapd -C /etc/imapd.domain2.com.conf " 
listen="192.168.172.4:imap" maxchild=-1 maxforkrate=100
imap4 cmd="imapd -C /etc/imapd.domain2.com.conf " 
listen="192.168.110.172:imap" maxchild=-1 maxforkrate=100
imap5 cmd="imapd -C /etc/imapd.domain3.com.conf " 
listen="192.168.174.4:imap" maxchild=-1 maxforkrate=100
imap6 cmd="imapd -C /etc/imapd.domain3.com.conf " 
listen="192.168.110.174:imap" maxchild=-1 maxforkrate=100


imaps1
imaps2
imaps3

sieve1
sieve2

lmtp1
lmtp2
...

--Blake


Cyrus Home Page: http://www.cyrusimap.org/
List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
To Unsubscribe:
https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus


Re: Multi-thread cyrus delayed forking of imapd processes after connecting to master listener

2017-05-23 Thread Patrick Boutilier
I have done something like this before, define the command in 
/etc/cyrus.conf as the strace command. Define it on a test IP so you are 
the only one hitting it. Something like:


imap cmd="/usr/bin/strace -q -v -s200 -f -F -o /home/cyrus/pop3 
/full/path/to/imapd -C /etc/imapd.domain4.com.conf " 
listen="192.168.110.175:imap" maxchild=-1 maxforkrate=100


Also just noticed that in your cyrus.conf file the SERVICES names are 
not unique. They all are named imap, imaps, sieve, or lmtp. Not sure 
about 2.4.18 but in the 3.0.1 man page it says "In the SERVICES section, 
names must be unique." Wouldn't hurt naming them different to see if 
that makes a difference.





On 05/23/2017 11:38 AM, Michael Ulitskiy wrote:

you can use 'strace -p ', specifying the pid of process you want to
trace. you will have to "catch" the process that blocks. it may not be easy,
but I have no other suggestions.

On Tuesday, May 23, 2017 06:19:17 PM Michael Hieb wrote:

The SASL is cyrus-sasl 2.1.26-9.5. I believe it does use /dev/urandom.

I am not sure how to run strace on the process that the Master listener
forks. Here is the strace run on the imapd process at a command prompt
(which is not quite the same as the master listener forking it to a port
where another process is waiting to connect to it).

MAILSERVER:~ # strace /usr/lib/cyrus/bin/imapd -C
/etc/imapd.domain1.com.conf
execve("/usr/lib/cyrus/bin/imapd", ["/usr/lib/cyrus/bin/imapd", "-C",
"/etc/imapd.domain1.com.conf"], [/* 56 vars */]) = 0
brk(0)  = 0x5573deaf5000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x7fdeb770c000
access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or
directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=80522, ...}) = 0
mmap(NULL, 80522, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdeb76f8000
close(3)= 0
open("/usr/lib64/libsasl2.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300N\0\0\0\0\0\0"...,
832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=118552, ...}) = 0
mmap(NULL, 2213800, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
0) = 0x7fdeb72d
mprotect(0x7fdeb72ec000, 2093056, PROT_NONE) = 0
mmap(0x7fdeb74eb000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b000) = 0x7fdeb74eb000
close(3)= 0
open("/usr/lib64/libkrb5.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200Y\2\0\0\0\0\0"...,
832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=855280, ...}) = 0
mmap(NULL, 2951008, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
0) = 0x7fdeb6fff000
mprotect(0x7fdeb70c1000, 2093056, PROT_NONE) = 0
mmap(0x7fdeb72c, 65536, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xc1000) = 0x7fdeb72c
close(3)= 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x7fdeb76f7000
open("/lib64/libcom_err.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\26\0\0\0\0\0\0"...,
832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=14760, ...}) = 0
mmap(NULL, 2109928, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
0) = 0x7fdeb6dfb000
mprotect(0x7fdeb6dfe000, 2093056, PROT_NONE) = 0
mmap(0x7fdeb6ffd000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7fdeb6ffd000
close(3)= 0
open("/lib64/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
read(3,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0pr\1\0\0\0\0\0"..., 832)
= 832
fstat(3, {st_mode=S_IFREG|0555, st_size=440632, ...}) = 0
mmap(NULL, 2535888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
0) = 0x7fdeb6b8f000
mprotect(0x7fdeb6bf, 2097152, PROT_NONE) = 0
mmap(0x7fdeb6df, 45056, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x61000) = 0x7fdeb6df
close(3)= 0
open("/lib64/libcrypto.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
read(3,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\313\6\0\0\0\0\0"...,
832) = 832
fstat(3, {st_mode=S_IFREG|0555, st_size=2447744, ...}) = 0
mmap(NULL, 4559184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
0) = 0x7fdeb6735000
mprotect(0x7fdeb6962000, 2097152, PROT_NONE) = 0
mmap(0x7fdeb6b62000, 167936, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22d000) = 0x7fdeb6b62000
mmap(0x7fdeb6b8b000, 12624, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdeb6b8b000
close(3)= 0
open("/usr/lib64/libdb-4.8.so", O_RDONLY|O_CLOEXEC) = 3
read(3,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@X\2\0\0\0\0\0"..., 832)
= 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1560248, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x7fdeb76f6000
mmap(NULL, 3655304, PROT_READ|PROT_EXEC, 

Re: Multi-thread cyrus delayed forking of imapd processes after connecting to master listener

2017-05-23 Thread Michael Ulitskiy
you can use 'strace -p ', specifying the pid of process you want to 
trace. you will have to "catch" the process that blocks. it may not be easy,
but I have no other suggestions.

On Tuesday, May 23, 2017 06:19:17 PM Michael Hieb wrote:
> The SASL is cyrus-sasl 2.1.26-9.5. I believe it does use /dev/urandom.
> 
> I am not sure how to run strace on the process that the Master listener
> forks. Here is the strace run on the imapd process at a command prompt
> (which is not quite the same as the master listener forking it to a port
> where another process is waiting to connect to it).
> 
> MAILSERVER:~ # strace /usr/lib/cyrus/bin/imapd -C
> /etc/imapd.domain1.com.conf
> execve("/usr/lib/cyrus/bin/imapd", ["/usr/lib/cyrus/bin/imapd", "-C",
> "/etc/imapd.domain1.com.conf"], [/* 56 vars */]) = 0
> brk(0)  = 0x5573deaf5000
> mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
> = 0x7fdeb770c000
> access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or
> directory)
> open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
> fstat(3, {st_mode=S_IFREG|0644, st_size=80522, ...}) = 0
> mmap(NULL, 80522, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdeb76f8000
> close(3)= 0
> open("/usr/lib64/libsasl2.so.3", O_RDONLY|O_CLOEXEC) = 3
> read(3,
> "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300N\0\0\0\0\0\0"...,
> 832) = 832
> fstat(3, {st_mode=S_IFREG|0755, st_size=118552, ...}) = 0
> mmap(NULL, 2213800, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
> 0) = 0x7fdeb72d
> mprotect(0x7fdeb72ec000, 2093056, PROT_NONE) = 0
> mmap(0x7fdeb74eb000, 8192, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b000) = 0x7fdeb74eb000
> close(3)= 0
> open("/usr/lib64/libkrb5.so.3", O_RDONLY|O_CLOEXEC) = 3
> read(3,
> "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200Y\2\0\0\0\0\0"...,
> 832) = 832
> fstat(3, {st_mode=S_IFREG|0755, st_size=855280, ...}) = 0
> mmap(NULL, 2951008, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
> 0) = 0x7fdeb6fff000
> mprotect(0x7fdeb70c1000, 2093056, PROT_NONE) = 0
> mmap(0x7fdeb72c, 65536, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xc1000) = 0x7fdeb72c
> close(3)= 0
> mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
> = 0x7fdeb76f7000
> open("/lib64/libcom_err.so.2", O_RDONLY|O_CLOEXEC) = 3
> read(3,
> "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\26\0\0\0\0\0\0"...,
> 832) = 832
> fstat(3, {st_mode=S_IFREG|0755, st_size=14760, ...}) = 0
> mmap(NULL, 2109928, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
> 0) = 0x7fdeb6dfb000
> mprotect(0x7fdeb6dfe000, 2093056, PROT_NONE) = 0
> mmap(0x7fdeb6ffd000, 8192, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7fdeb6ffd000
> close(3)= 0
> open("/lib64/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
> read(3,
> "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0pr\1\0\0\0\0\0"..., 832)
> = 832
> fstat(3, {st_mode=S_IFREG|0555, st_size=440632, ...}) = 0
> mmap(NULL, 2535888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
> 0) = 0x7fdeb6b8f000
> mprotect(0x7fdeb6bf, 2097152, PROT_NONE) = 0
> mmap(0x7fdeb6df, 45056, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x61000) = 0x7fdeb6df
> close(3)= 0
> open("/lib64/libcrypto.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
> read(3,
> "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\313\6\0\0\0\0\0"...,
> 832) = 832
> fstat(3, {st_mode=S_IFREG|0555, st_size=2447744, ...}) = 0
> mmap(NULL, 4559184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
> 0) = 0x7fdeb6735000
> mprotect(0x7fdeb6962000, 2097152, PROT_NONE) = 0
> mmap(0x7fdeb6b62000, 167936, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22d000) = 0x7fdeb6b62000
> mmap(0x7fdeb6b8b000, 12624, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdeb6b8b000
> close(3)= 0
> open("/usr/lib64/libdb-4.8.so", O_RDONLY|O_CLOEXEC) = 3
> read(3,
> "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@X\2\0\0\0\0\0"..., 832)
> = 832
> fstat(3, {st_mode=S_IFREG|0755, st_size=1560248, ...}) = 0
> mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
> = 0x7fdeb76f6000
> mmap(NULL, 3655304, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
> 0) = 0x7fdeb63b8000
> mprotect(0x7fdeb653, 2097152, PROT_NONE) = 0
> mmap(0x7fdeb673, 20480, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x178000) = 0x7fdeb673
> close(3)= 0
> open("/lib64/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
> read(3,
> "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P#\0\0\0\0\0\0"..., 832)
> = 832
> fstat(3, {st_mode=S_IFREG|0755, st_size=88216, ...}) = 0
> mmap(NULL, 2183304, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
> 0) =