CentOS 7.4.1708のPHP 7.1.13
空のスクリプトを使用したりバージョン情報を取得したりするためにphpを呼び出すと、説明できない遅延(2〜10秒)が発生します。以前は、どのシステムでもこれが起こるのを見たことがなく、デバッグまたは修正する方法もわかりません。
遅延範囲は2〜10秒です。他のシステムと同様に、数ミリ秒しかかかりません。他のプログラムでは、このような遅延は発生しません。
システム負荷は無視できます。
08:32:00 up 8 days, 2:23, 1 user, load average: 0.26, 0.29, 0.35
誰でもこれについてアドバイスを提供できますか?
基準:
$ time php -v
PHP 7.1.13 (cli) (built: Jan 4 2018 15:22:08) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.13, Copyright (c) 1999-2017, by Zend Technologies
real 0m1.916s
user 0m0.015s
sys 0m0.012s
$ time php -r ''
real 0m9.841s
user 0m0.015s
sys 0m0.009s
私はこのコンピュータの管理者ではありませんが、問題を解決するために管理者と協力しています。
この特定のパッケージがどのようにインストールされたかは言えません。
[編集する]
straceを実行するように提案され、POLLで一時停止することがわかりました。 PHPポーリングは何をしますか?
poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
sys admで10.226.139.110に何があるのか(またはあるべきか)を調べようとしています。ピングがよく鳴り、特別な遅れもありません。
socket(AF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.226.139.110")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
sendmmsg(3, {{{msg_name(0)=NULL, msg_iov(1)=[{"!\24\1\0\0\1\0\0\0\0\0\0\xxx\yyy"..., 50}], msg_controllen=0, msg_flags=MSG_DONTWAIT|MSG_EOR|MSG_CONFIRM|MSG_RST|MSG_ERRQUEUE|MSG_MORE|MSG_FASTOPEN|0x6620010}, 50}, {{msg_name(0)=NULL, msg_iov(1)=[{"!\367\1\0\0\1\0\0\0\0\0\0\xxx\yyy"..., 50}], msg_controllen=0, msg_flags=MSG_CONFIRM}, 50}}, 2, MSG_NOSIGNAL) = 2
poll([{fd=3, events=POLLIN}], 1, 5000) = 0 (Timeout)
socket(AF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.226.143.110")}, 16) = 0
poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
sendmmsg(4, {{{msg_name(0)=NULL, msg_iov(1)=[{"!\24\1\0\0\1\0\0\0\0\0\0\xxx\yyy"..., 50}], msg_controllen=0, msg_flags=MSG_DONTWAIT|MSG_EOR|MSG_CONFIRM|MSG_RST|MSG_ERRQUEUE|MSG_MORE|MSG_FASTOPEN|0x6620010}, 50}, {{msg_name(0)=NULL, msg_iov(1)=[{"!\367\1\0\0\1\0\0\0\0\0\0\xxx\yyy"..., 50}], msg_controllen=0, msg_flags=MSG_CONFIRM}, 50}}, 2, MSG_NOSIGNAL) = 2
poll([{fd=4, events=POLLIN}], 1, 5000) = 1 ([{fd=4, revents=POLLIN}])
ioctl(4, FIONREAD, [148]) = 0
recvfrom(4, "!\24\201\200\0\1\0\0\0\1\0\0\vcoloscrmweb\16indepen"..., 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.226.143.110")}, [16]) = 148
poll([{fd=4, events=POLLIN}], 1, 2769) = 1 ([{fd=4, revents=POLLIN}])
ioctl(4, FIONREAD, [148]) = 0
recvfrom(4, "!\367\201\200\0\1\0\0\0\1\0\0\xxx\yyy"..., 65536, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.226.143.110")}, [16]) = 148
close(3) = 0
close(4) = 0
socket(AF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.226.139.110")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
-
PHP-m
[PHP Modules]
apcu
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
igbinary
imap
json
libxml
mbstring
mcrypt
memcached
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
sqlsrv
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache
答え1
問題は、/etc/hostnameの値が/etc/hostsのローカルIPアドレスにマップされないことです。およびIMAPモジュール(imap.so)は初期化時にホスト名を解決しようとし(理解できない理由で)DNSに問い合わせます。この特定のホストのホスト名は、会社のDNSに登録されていません。
解決策:/ etc / hostsの編集
127.0.0.1 [whatever the /etc/hostname is]
(または他のローカルIPアドレス)
助けてくれてありがとう @ramansailopal
https://serverfault.com/questions/586141/php-cli-with-imap-5-second-startup-delay