【发布时间】:2019-09-23 16:50:01
【问题描述】:
最近,我偶然发现了一个运行模拟器的服务器上的日志,该服务器为我们的 CI 测试运行模拟器,其中一个模拟器在 adb devices 的输出中一直被列为“主机”,而不是通常的“设备”或偶尔的“离线” . (直到它的看门狗厌倦并杀死它。)
[18:49:37] 168 -rw-r--r-- 1 root root 14040 Sep 20 19:35 /tmp/watchlog
[18:49:37] 169 1 List of devices attached
[18:49:37] 170 2 emulator-5570 device
[18:49:37] 171 3 emulator-5568 device
[18:49:37] 172 4 emulator-5566 device
[18:49:37] 173 5 emulator-5564 device
[18:49:37] 174 6 emulator-5562 device
[18:49:37] 175 7 emulator-5560 device
[18:49:37] 176 8 emulator-5558 device
[18:49:37] 177 9 emulator-5556 device
[18:49:37] 178 10 emulator-5554 device
[18:49:37] 179 11 emulator-5572 host
它们都在自己的 docker 容器中,从同一个映像启动,连接到控制器容器中默认端口 5037 上的 ADB 服务器,并且它们正在运行 --net=host。
如果我在模拟器中运行 adb 设备,主机看起来就像我期望看到的那样,所以我猜测由于重新映射导致某种端口号冲突,但 adb 没有在任何 55xx 端口上运行。或者也许 adb 实例制作了一些随机 id,而这恰好与守护进程匹配? (我中奖了吗?)
我不知道这种情况有多频繁 - 我从没想过要监控奇怪的状态。
更新:我更仔细地查看了容器输出,发现 5573 的连接被拒绝。如果我启动一个模拟器,它的 adb 端口已经在使用(通过 nc -lk),它根本不会出现在 adb 中 -它没有列为主机。
[18:49:37] 35 == STATUS: 2019-09-20.19:32:03 emulator-starting-5572
[18:49:37] 36 + emulator -no-window -no-boot-anim -no-audio -gpu swiftshader_indirect -avd avdmanager-creation -port 5572 -no-snapshot-save
[18:49:37] 37 localhost [127.0.0.1] 5573 (?) : Connection refused
[18:49:37] 38 /local/emulauncher.sh: line 213: 77 Done echo ping
[18:49:37] 39 78 Killed | timeout -s9 3 nc localhost $[ ${EMULATOR_PORT} + 1 ]
[18:49:37] 40 qemu-system-x86_64: warning: TSC frequency mismatch between VM (1999997 kHz) and host (3399999 kHz), and TSC scaling unavailable
[18:49:37] 41 qemu-system-x86_64: warning: TSC frequency mismatch between VM (1999997 kHz) and host (3399999 kHz), and TSC scaling unavailable
[18:49:37] 42 60...emulator: Requested console port 5572: Inferring adb port 5573.
[18:49:37] 43 Your emulator is out of date, please update by launching Android Studio:
[18:49:37] 44 - Start Android Studio
[18:49:37] 45 - Select menu "Tools > Android > SDK Manager"
[18:49:37] 46 - Click "SDK Tools" tab
[18:49:37] 47 - Check "Android Emulator" checkbox
[18:49:37] 48 - Click "OK"
killed/ping/timeout-nc 让看门狗做一些事情,当它偶尔保持离线时,它似乎会唤醒模拟器,尽管使用“ping”让我怀疑我是否打算将它发送到 qemu 而不是adb 端口。 60...来自看门狗倒计时。
【问题讨论】: