2015-10-17 130 views
6

我在運行Ubuntu的Homestead vagrant框上執行PHP命令時一直掛起。在控制檯甚至開始執行php cli之前,有一個很大的滯後。所有流浪的PHP CLI腳本在Mac OS X上等待主機分辨率掛起

ran strace -vyT -S time php artisan help from vagrant box。一切都被卡住了幾分鐘就第一個到最後打電話recvfrom(3,但我不知道爲什麼:

open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3 <0.000010> 
fstat(3</run/resolvconf/resolv.conf>, {st_dev=makedev(0, 16), st_ino=7632, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=171, st_atime=2015/10/17-04:53:56, st_mtime=2015/10/17-04:53:54, st_ctime=2015/10/17-04:53:54}) = 0 <0.000007> 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fed9385c000 <0.000008> 
read(3</run/resolvconf/resolv.conf>, "# Dynamic resolv.conf(5) file fo"..., 4096) = 171 <0.000010> 
read(3</run/resolvconf/resolv.conf>, "", 4096) = 0 <0.000006> 
close(3</run/resolvconf/resolv.conf>) = 0 <0.000008> 
munmap(0x7fed9385c000, 4096)   = 0 <0.000011> 
uname({sysname="Linux", nodename="homestead", release="3.13.0-65-generic", version="#106-Ubuntu SMP Fri Oct 2 22:08:27 UTC 2015", machine="x86_64", domainname="(none)"}) = 0 <0.000006> 
stat("/etc/resolv.conf", {st_dev=makedev(0, 16), st_ino=7632, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=171, st_atime=2015/10/17-04:53:56, st_mtime=2015/10/17-04:53:54, st_ctime=2015/10/17-04:53:54}) = 0 <0.000008> 
open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 3 <0.000009> 
fstat(3</etc/hosts>, {st_dev=makedev(8, 1), st_ino=1161, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=251, st_atime=2015/10/16-18:57:29, st_mtime=2014/10/03-01:16:42, st_ctime=2014/10/03-01:16:42}) = 0 <0.000005> 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fed9385c000 <0.000008> 
read(3</etc/hosts>, "127.0.0.1 localhost\n\n# The follo"..., 4096) = 251 <0.000009> 
read(3</etc/hosts>, "", 4096)   = 0 <0.000007> 
close(3</etc/hosts>)     = 0 <0.000007> 
munmap(0x7fed9385c000, 4096)   = 0 <0.000010> 
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3 <0.000012> 
fcntl(3<socket:[78362]>, F_SETFL, O_RDONLY|O_NONBLOCK) = 0 <0.000006> 
connect(3, {sa_family=AF_INET, sin_port=htons(9000), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress) <0.000094> 
select(4, [3<socket:[78362]>], [3<socket:[78362]>], [3<socket:[78362]>], {0, 200000}) = 1 (out [3], left {0, 199997}) <0.000010> 
getpeername(3, {sa_family=AF_INET, sin_port=htons(9000), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0 <0.000007> 
fcntl(3<socket:[78362]>, F_SETFL, O_RDONLY) = 0 <0.000006> 
setsockopt(3, SOL_TCP, TCP_NODELAY, "\1\0\0\0\0\0\0\0", 8) = 0 <0.000008> 
write(3<socket:[78362]>, "478\0<?xml version=\"1.0\" encoding"..., 483) = 483 <0.000042> 
brk(0x2f93000)       = 0x2f93000 <0.000472> 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <4.940291> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.072574> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.033758> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.038904> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.026003> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.024057> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.055221> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.058240> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.027569> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.056877> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.025934> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.076699> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.089092> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.254680> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.131634> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.065721> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.042778> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.072277> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.044424> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <0.080704> 
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} --- 
recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = -1 ECONNRESET (Connection reset by peer) <113.777721> 

這裏是/etc/hosts內容:

127.0.0.1 localhost 

# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
ff02::3 ip6-allhosts 
127.0.1.1 homestead homestead 

/etc/resolve.conf內容:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) 
#  DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN 
nameserver 10.0.2.3 

問題現在正在影響每個無關的流浪漢箱子,而不僅僅是宅基地箱子。每個CLI執行時,每個框上的幾乎每個PHP命令都會停頓5-15分鐘。如果必須調用一系列命令,則完成需要30秒的過程可能需要一個小時。

這是在Mac上運行這些盒子後開始升級到El Capitan。

根據流浪者中,有時這strace的行:

connect(3, {sa_family=AF_INET, sin_port=htons(9000), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 

被替換爲:

connect(3, {sa_family=AF_INET, sin_port=htons(9000), sin_addr=inet_addr("192.168.56.1")}, 16) = 0 

的IP 192.168.56.1似乎是VirtualBox的默認路由器。

請注意,所有的流浪者箱子都是標準配置或那些在我的其他團隊成員的Mac/Windows系統上沒有問題的工作。

Vagrant 1.7.4和VirtualBox 4.3.30。

在響應請求route -n

Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
0.0.0.0   10.0.2.2  0.0.0.0   UG 0  0  0 eth0 
10.0.2.0  0.0.0.0   255.255.255.0 U  0  0  0 eth0 
192.168.10.0 0.0.0.0   255.255.255.0 U  0  0  0 eth1 

結果sudo netstat -tulnp | grep 9000

tcp6  0  0 :::9000     :::*     LISTEN  1317/hhvm 

爲什麼HHVM被顯示出來,我不知道,因爲盒子是應該使用標準PHP解釋器。

回答

0

TL;博士:我怪Xdebug的客戶端。嘗試在Ubuntu上禁用xdebug。

我的理由

我沒有看到在strace的日誌有主機解決任何問題。

它檢查/etc/resolv.conf第一,然後/etc/hosts並連接到127.0.0.1:9000 connect(3, {sa_family=AF_INET, sin_port=htons(9000), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress) <0.000094>

端口9000是XDebug的默認值,除非在/etc/php5/mods-available/xdebug.ini或類似重新定義。

write(3<socket:[78362]>, "478\0<?xml version=\"1.0\" encoding"..., 483) = 483 <0.000042>看起來像從Xdebug擴展發送到客戶端的消息。

它等待2分鐘recvfrom(3, 0x7ffc489b16d0, 128, 0, 0, 0) = ? ERESTARTSYS,然後放棄,並執行你的PHP腳本。

因爲V2.2.4的等待時間已縮短到200毫秒:https://github.com/xdebug/xdebug/pull/90

假設的XDebug的禁用解決這個問題,有幾個選項:

  • 升級Xdebug的
  • 配置XDebug的按需啓動xdebug.remote_autostart=off
  • 保持啓用/禁用xdebug
  • 保持xdebug客戶端始終開啓並且確保端口映射正確,並且不會掛起
+0

這是Xdebug與HHVM的端口9000衝突。已經使用Xdebug 2.3.2。需要'xdebug.remote_autostart = on',因爲我經常使用PHPStorm的xdebug連接進行調試,所以我試着將Xdebug端口更改爲9001以消除與HHVM的端口衝突。這解決了這個問題。不知道爲什麼這突然開始成爲一個問題,當它不是以前,但很高興它解決了! – eComEvo

+0

即使在更改端口之後,也會隨機開始發生,但是如果完全禁用xdebug,則會掛起50分鐘。嘗試完全刪除HHVM,然後升級到'xdebug-2.4.0rc3'並完成了一次完整的系統重啓。還在懸掛。最終發現禁用'xdebug.remote_autostart = 1'完全解決了這個問題。 – eComEvo

0

問題似乎與主機名解析有關。如果您嘗試使用您的ip而不是本地主機ip 127.0.0.1。最好在/etc/hosts使用像:

yourip hostname.example.com hostname 

例如

10.0.2.20 test.example.com test 

,並刪除localhost/etc/hosts相關或保持在最後。系統會嘗試第一次輸入,如果你不使用ipv6,那麼你也可以刪除ipv6相關條目。

編輯:/etc/resolv.conf文件應該有波紋線

nameserver 127.0.0.1 

還添加流浪漢默認的網絡,因爲你的輸出顯示它嘗試連接時,但如果你不想使用,那麼你可以跳過。您正在使用127.0.0.1所以至少應該是there.you可以幫助從herehere改變。

+0

不知道我跟隨。這是在一個無聊的安裝。它永遠是本地主機,外部世界無法訪問。我沒有其他IP可以爲我所知的這個隔離的測試環境指定。 – eComEvo

+0

如果你使用'10.0..2.20 test.example.com測試',那麼你將只能從主機訪問而不是來自外部世界。 bcoz ip 10.0.2.20是私有IP。如果你輸入主機瀏覽器http://test.example.com,它將打開,如果你嘗試從其他主機訪問,你將無法訪問。 –

+0

爲什麼我會在標準127.0.0.1上將地址更改爲10.0.2.20? – eComEvo

0

那麼感覺就像是一個DNS問題。我的猜測是你的機器無法通過給定的主機名解析DNS,或者DNS服務器速度很慢。我的建議是在本地安裝一個緩存DNS服務器,然後使用它,並將任何私有網絡中的任何內容添加到/ etc/hosts文件中,這將不會從DNS提供。使用NetworkManager或任何必須將127.0.0.1添加爲可行(並且首選)DNS服務器的網絡服務,並且事情應該能夠順利進行。如果你使用的是Ubuntu,那應該和sudo apt-get install bind9一樣簡單。

如果您想診斷問題,請首先安裝dnsutils,以獲取dig和nslookup,然後嘗試查詢某些內容(如www.google.co.uk),查看需要多長時間以及哪臺服務器具有權威性。然後嘗試使用dig,更具體地說,直接詢問服務器,直接詢問SOA,看看是否可以找出最弱的鏈接。

這可能是的廣告本身通過DHCP DNS服務的路由器,但按下時工作不正常。