现象
- 在跑ios脚本的时候老是出现动不动手机就重启导致脚本全部失败
- 重启完手机之后手机没做任何操作又自动重启
- 电脑非常卡,查看cpu占用已经到100%了,吓我一跳,使用top查看进程,有个进程在作怪, 这个命令是appium 集成libimobiledevice获取设备日志的一个进程,但是不是为什么这个进程在appium执行操作完成之后,为啥没被回收(感觉是appium的一个bug),导致ios设备不堪重负,一直重启,电脑的占用cpu也是一直居高不下
501 19853 1 0 10:58上午 ?? 5:10.83 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 19880 1 0 10:59上午 ?? 4:53.00 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 19895 1 0 11:01上午 ?? 4:39.21 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 19920 1 0 11:03上午 ?? 3:54.36 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 19927 1 0 11:04上午 ?? 3:52.78 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 19937 1 0 11:05上午 ?? 3:35.71 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 19949 1 0 11:05上午 ?? 3:16.59 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 19961 1 0 11:07上午 ?? 3:04.22 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 19975 1 0 11:08上午 ?? 2:48.37 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 19985 1 0 11:09上午 ?? 2:40.48 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20007 1 0 11:10上午 ?? 2:19.15 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20014 1 0 11:11上午 ?? 2:12.81 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20024 1 0 11:11上午 ?? 2:05.05 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20036 1 0 11:12上午 ?? 1:54.01 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20046 1 0 11:14上午 ?? 1:39.12 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20056 1 0 11:14上午 ?? 1:31.80 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20071 1 0 11:16上午 ?? 1:22.56 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20082 1 0 11:17上午 ?? 1:06.29 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20093 1 0 11:18上午 ?? 1:03.02 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20103 1 0 11:19上午 ?? 0:54.19 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20114 1 0 11:19上午 ?? 0:44.39 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
501 20124 1 0 11:20上午 ?? 0:42.61 idevicesyslog -u 012ec22eb08a01ba4350f427645358ac6a7ccbeb
解决办法
- 两个地方需要解决
- 注释调app pushlog 的方法,防止appium获取设备日志的时候内存溢出,导致服务失败,源码在/node_modules/appium/node_modules/appium-adb/build/lib/logcat.js的第155,156行
// 处理内存溢出,不释放链接
// this.logs.push(outputObj);
// this.logsSinceLastRequest.push(outputObj);
var isTrace = /W\/Trace/.test(output);
if (this.debug && (!isTrace || this.debugTrace)) {
log.debug(prefix + output);
- 手动kill idevicesyslog 进程,防止进程大量堆积, 导致电脑和手机卡死,但是这样会失去一个功能,就是获取ios系统日志的功能Capability里面的showIOSLog功能,不过这个选项默认本来就是False的,所以没有用这个功能的同学大可放心
def kill_idevicesyslog():
"""
ios获取设备运行时log,appium运行时会占用大量的脚本机cpu,所以每次都杀死所有的idevicesyslog进程,可以有效防止ios设备运行卡死
出现原因:由于每次appium启动ios配置服务时,会有一个获取ios log的cap参数clearSystemFiles,官网文档已删除,但是最新版的appium
还是在使用这段代码,但是不走那个关闭逻辑了
:param udid:
:return:
"""
command = "pkill idevicesyslog"
subprocess.Popen(command, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE).stdout.readlines()
U.Logging.info("kill idevicesyslog succ")
- 如果有出现的同学可以试试我厂的方法,我厂用此方法可以完美解决问题