3

Having installed "php-imap-5.3.3-27.el6_5.x86_64" on a RedHat Enterprise 6.5 server, the CLI version of PHP always takes 5 seconds to run:

php -n -d extension=imap.so -v
PHP 5.3.3 (cli) (built: Dec  5 2013 07:09:40) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

real  0m5.023s
user  0m0.006s
sys   0m0.010s

Note that the "-n" disables the usual php.ini, and only loads "imap.so" (just for debug purposes).

Do you have any idea what might be causing this? it seems to be pausing for something, possibly a timeout?

There is nothing mentioned in the SELinux audit logs, but interestingly loading the library does seem to be trying (failing?) to connect to the DNS server for some reason?

strace -s -c php -n -d extension=imap.so -v

  execve("/usr/bin/php", [...], [/* 24 vars */]) = 0
  brk(0)                                  = 0x15e2000

[...]

  socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
  connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.1")}, 16) = 0
  poll([...], 1, 0)                       = 1 ([...])
  sendto(3, ""..., 38, MSG_NOSIGNAL, NULL, 0) = 38
  poll([...], 1, 5000)                    = 1 ([...])
  sendto(3, ""..., 38, MSG_NOSIGNAL, NULL, 0) = 38
  poll([...], 1, 4999)                    = 1 ([...])
  ioctl(3, FIONREAD, [254])               = 0
  recvfrom(3, ""..., 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.1")}, [16]) = 254
  poll([...], 1, 4998

[... 5 second pause ...]

  )                    = 0 (Timeout)
  poll([...], 1, 0)                       = 1 ([...])
  sendto(3, ""..., 38, MSG_NOSIGNAL, NULL, 0) = 38
  poll([...], 1, 5000)                    = 1 ([...])
  ioctl(3, FIONREAD, [254])               = 0
  recvfrom(3, ""..., 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.1")}, [16]) = 254
  poll([...], 1, 4998)                    = 1 ([...])
  sendto(3, ""..., 38, MSG_NOSIGNAL, NULL, 0) = 38
  poll([...], 1, 4998)                    = 1 ([...])
  ioctl(3, FIONREAD, [97])                = 0
  recvfrom(3, ""..., 1794, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.1")}, [16]) = 97
  close(3)                                = 0
  alarm(0)                                = 0

[...]

Having checked with dig, the DNS seems to respond fine:

dig +short example.com @192.168.1.1
93.184.216.119

As to the obligatory strace count output:

strace -c php -n -d extension=imap.so -v

PHP 5.3.3 (cli) (built: Dec  5 2013 07:09:40)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 27.14    0.000019           0       103           mmap
 25.71    0.000018           0        48           read
 25.71    0.000018           5         4           socket
 21.43    0.000015           0        47           fstat
  0.00    0.000000           0         1           write
  0.00    0.000000           0        49         2 open
  0.00    0.000000           0        51           close
  0.00    0.000000           0         6         2 stat
  0.00    0.000000           0         8           poll
  0.00    0.000000           0         1           lseek
  0.00    0.000000           0        54           mprotect
  0.00    0.000000           0        19           munmap
  0.00    0.000000           0        14           brk
  0.00    0.000000           0         4           rt_sigaction
  0.00    0.000000           0         6           rt_sigprocmask
  0.00    0.000000           0        12           ioctl
  0.00    0.000000           0         4         3 access
  0.00    0.000000           0         3           alarm
  0.00    0.000000           0         3         2 connect
  0.00    0.000000           0         5           sendto
  0.00    0.000000           0         3           recvfrom
  0.00    0.000000           0         3           recvmsg
  0.00    0.000000           0         1           bind
  0.00    0.000000           0         1           getsockname
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           uname
  0.00    0.000000           0         4           fcntl
  0.00    0.000000           0         1           getcwd
  0.00    0.000000           0         1           getrlimit
  0.00    0.000000           0         1           statfs
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0        11         1 futex
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         1           set_robust_list
------ ----------- ----------- --------- --------- ----------------
100.00    0.000070                   473        10 total

And ltrace (with quite a bit of memcpy/free/memset time):

ltrace -c php -n -d extension=imap.so -v

PHP 5.3.3 (cli) (built: Dec  5 2013 07:09:40)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
 41.92    7.377898         790      9331 memcpy
 32.32    5.689380         581      9788 free
 11.48    2.021224       14972       135 memset
  7.79    1.371877         147      9297 malloc
  2.86    0.503343         157      3191 strlen
  1.62    0.285582         147      1940 __ctype_tolower_loc
  0.84    0.147136         145      1010 strrchr
  0.37    0.065134         148       440 calloc
  0.21    0.036233         151       239 realloc
  0.14    0.024520       12260         2 getprotobyname
  0.12    0.020486       20486         1 dlopen
  0.07    0.012101         124        97 strcasecmp
  0.07    0.011930         142        84 strtol
  0.06    0.010258         170        60 strchr
  0.02    0.004310         172        25 _setjmp
  0.02    0.003569         148        24 __ctype_b_loc
  0.02    0.002862        2862         1 ERR_load_crypto_strings
  0.01    0.001339         148         9
  0.01    0.001298        1298         1 using_history
  0.01    0.001027         171         6 strncasecmp
  0.01    0.000898         898         1 dlclose
  0.01    0.000893         127         7 getenv
  0.00    0.000682         170         4 fflush
  0.00    0.000371         371         1 tzset
  0.00    0.000358         179         2 xmlParserInputBufferCreateFilenameDefault
  0.00    0.000354         354         1 ERR_load_ERR_strings
  0.00    0.000351         351         1 setlocale
  0.00    0.000346         173         2 xmlSetGenericErrorFunc
  0.00    0.000341         170         2 xmlOutputBufferCreateFilenameDefault
  0.00    0.000326         163         2 signal
  0.00    0.000326         163         2 __strtok_r
  0.00    0.000312         312         1 SSL_library_init
  0.00    0.000303         303         1 OpenSSL_add_all_ciphers
  0.00    0.000282         282         1 EVP_cleanup
  0.00    0.000253         253         1 xmlInitParser
  0.00    0.000245         245         1 OPENSSL_add_all_algorithms_noconf
  0.00    0.000224         224         1 write
  0.00    0.000223         223         1 sigprocmask
  0.00    0.000191         191         1 OpenSSL_add_all_digests
  0.00    0.000187         187         1 xmlCleanupParser
  0.00    0.000178         178         1 xmlSetStructuredErrorFunc
  0.00    0.000176         176         1 xmlRelaxNGCleanupTypes
  0.00    0.000175         175         1 ERR_load_EVP_strings
  0.00    0.000175         175         1 X509_get_default_cert_area
  0.00    0.000172         172         1 sigemptyset
  0.00    0.000171         171         1 xmlResetLastError
  0.00    0.000170         170         1 strncmp
  0.00    0.000169         169         1 time
  0.00    0.000169         169         1 sigaddset
  0.00    0.000167         167         1 SSL_get_ex_new_index
  0.00    0.000154         154         1 __gmp_set_memory_functions
  0.00    0.000153         153         1 pcre_version
  0.00    0.000151         151         1 gnu_get_libc_version
  0.00    0.000145         145         1 __xmlParserVersion
  0.00    0.000092          92         1 getcwd
  0.00    0.000079          79         1 dlsym
  0.00    0.000072          72         1 __strdup
------ ----------- ----------- --------- --------------------
100.00   17.601541                 35732 total

Related, but not solved by:

http://superuser.com/questions/336177/running-php-as-cli-takes-a-long-time
http://trac.macports.org/ticket/35222
https://bugs.php.net/bug.php?id=41968
https://github.com/liip/php-osx/issues/102

1 Answer 1

3

Not a complete answer... but watching the output from:

tcpdump -vvv port 53

Showed the server was trying to resolve its hostname... now while dig can resolve this, I assume that something (SELinux?) is blocking php?

So adding an entry to the /etc/hosts file:

127.0.0.1   example.net

Seems to have done the trick:

time php -n -d extension=imap.so -v
PHP 5.3.3 (cli) (built: Dec  5 2013 07:09:40) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

real  0m0.011s
user  0m0.007s
sys   0m0.003s

I'm probably going to leave it there... but it does still beg the question, why was it unable todo a DNS lookup, and why was the library (without even being used) even trying todo a DNS lookup?

2
  • 1
    I had no SELinux denials, and indeed PHP startup was slow in permissive mode too. But I was indeed missing an entry in /etc/hosts file for hostname.localdomain of this development machine and adding that entry solved it. This hadn't always been a problem but may have appeared with an update to php-imap-5.5.18 last week in Fedora 20.
    – Michael
    Nov 16, 2014 at 22:55
  • Besides adding 127.0.0.1 in /etc/hosts, on my Mac OS sierra I also needed to add ::1 (for IPv6).
    – boerl
    Nov 16, 2016 at 15:46

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .