00:00
Hello,同学们,那么接下来我们来聊一聊刚刚我们使用的这个插件叫sh publish啊,它的这个超时机制啊,如果前面的例子有同学做了的话呢,呃,会发现有可能在运行的到最后的时候啊,他可能会出现一个黄标,然后最后呢,会提示呃连接超时,最终的这个任务并没有成功,那我们再跑一下现在的这个,呃,我们这个任务带着大家来看一下这个效果,这种错误呢,并不是每一次呢都会出现。啊,在出现的时候,呃,我们可以仔细的去观察一下,他在这个控制台,也就是最终的这个日志里边究竟输出了什么。大家看一下啊。大概就是在这可住啊,然后呢会报错,那我这呢没有报错,这个错误并不是每一次都会出现啊,在这儿呢,就会有引发它的这个超时机制啊,咱们仔细再看一眼这个日志,这ESEC表明呢,我们执行这个程序的时候,呃,产生了一些信息,比如complete,这指只是指明了它这个执行成功了,然后after 5000多毫秒,这就是用了五秒的时间,那我们这个炸包呢,其实也就用么几兆的大小,或者是十几兆,几十兆。
01:22
在内网环境下,我把这个炸包传输到另外一台机器,它绝对用不了五秒钟的时间,所以这个时间呢,它也是不正常的,那么如果要是超过了它默认所配置的超时时间,那么在这呢就会报错,那么什么情况有可能会引发这个呃超时,第一就有可能我传输的文件实在是过大,或者是执行的这个任务的,呃,难度比较大,再有就是我发送的执行脚本,大家看我们现在呢发送的一个简单脚本。就是让他启动一下。呃,我们的这个炸包就传过去,一炸包,我们用这个no ho,然后Java刚炸,然后边加了一个Dollar符。
02:02
啊,不是Dollar for加了一个end符,让他在后台执行,对吧,我们就发送这么一个命令,这个命令呢,就有可能会卡住啊,还有就是比较复杂的这个shell脚本命令啊,执行了这种复杂的运算计算,或者是你需要去查数据库等等这些呃复杂操作耗时过程,那么一旦超它超过了,大家看这高级,这下边呢,有一个eec,然后timeout的毫秒,这默认的是1万,呃是12万毫秒啊,约等于两分钟啊,就是两分钟的时间,如果超过了两分钟呢,他直接就报错了,那如果我们明知道我们前面他执行的任务可能会时间比较长的话,那么我心里要有预期,那么在这儿呢,输入我们相应的呃执行时间啊,不要让他报错,再有就是我们之前的这个命令呢,有可能会这个报错超时是为什么呢?那么我们来检查一下这个命令,它究竟在命令行执行的时候会是什么样子的。
03:00
那么我们到这个,呃,这个我们的命令航上看一下啊。现在的叉叉oo呢,这目录已经给我们创建出来了。然后这个炸包也有,那么执行一下这个命令,你看会出现。什么情况来走?大家看。当我敲了回车之后,它会卡在这,哎,这它会提示no hope忽略输入,并把输出追加到no hope.out。这会儿呢,我们的这个命令行呢,其实是已经卡住的,来我们再敲一下回车,哎,它会退出。对吧,这个退出是因为我们现在已经启动了一个。这个呃,之前的这个项目了,我再起一个的话,它会有端口冲突,那我们看看它的这个日志,当我们输出到了这个no ho里,你打开看一下。
04:01
在最下边呢,它一定是报错了对吧,因为端口有冲突啊,我们在这儿就不细说了,跟大家想要说的是,一旦出现这种情况啊,在这个命令行上有卡住这种情况,我们的这个jackins会认为当前这个任务并没有执行完成。啊,直到的这个呃,真正的这个呃,回到了初始的状态,我们又可以进入输入状态了,这会儿才算是一号命令输入完成,那么很明显我们这个命令呢,不能往外发送,原因有两个,第一个呢,就是这个命令在启动的时候,一旦要是呃卡住的话。那么他会认为他这个,呃,这个这个。任务呢没完成,那么我们的这个整个这个任务呢,呃,就会超时,第二个呢,就是他没有把之前我启动过的这个这给它给替换掉,我们看看现在启动好的这个炸包。它的这个,呃,PID是1515,那我们再启动一次。他不会把之前的这个炸包给停掉,重新起一次,而是啊再起一个,并且他报错了啊,然后再看QPS。
05:08
还是1515对吧,那么如果把它给Q掉。然后再执行的话。我们看。哎,他同样也是会卡住。然后敲一下回车,再看QPS。1688对吧,虽然说新的这个炸包已经启动起来了,它也是会卡住的,一旦要卡住时间超时了,就非常有可能导致我们这个任务整体就失败了,那么这会儿我们怎么做,就是要让它这个启动命令啊,在这儿呢,我们先做一层稍微的优化,那么怎么优化呢?现在它这个命令好像卡住了,是为什么卡住呢?是因为它会提示我们有这个no ho的这么一个呃,指令,然后这个输出到哪,因为我没有指定这个具体我们这个日志给它给输出到哪。
06:00
啊no,这个指令呢,是让我们把这个呃,当前所运行的这个进程啊,在我们当前窗口退出之后,也就是当前会话退出之后,还能够继续运行的这么一个呃命令啊,然后这个。加后边这个and符呢,是让它在后台运行,这两个配合到一起,就可以用远程命令启动我们的jar包了,那么我们接下来需要指定一下这ho,在我们真正启动之后,那么这个日志让他写到哪儿啊,他就不会再提示啊这个呃,这这么一个追加具体到哪个文件里面,里边这么一个提示了,那怎么做呢?大家看这。这个东后后边我们可以跟一个大于号,让它指向具体的某一个文件,那么它就不会再提示我们写在了哪个文件里了,这个大于号这是数据流操作符,那么在后边跟的具体文件名呢?啊,它指的就是写入到这个文件里,这个大于号呢,还有两种,一个是一个大于号,还有就是两个大于号分别表示追加和直接写入,直接写入呢就是覆盖了。
07:07
啊,两个呢,就是追加,往文件里边去追加。然后后边这个二大于AND1,这是啥意思,这是固定的写法啊二呢。它代表标准的错误输出,一呢,它代表标准的输出,就是没有错误啊,正常输出和错误输出全部都追加过来,这属于标准写法,另外还有一种简单的写法啊,就是把这个二和一二大于一,这个不写,直接在这儿呢写一个and符来,我们在这儿测试一下,我们把这行命令。复制到我们的命令行上来粘贴。走。大家看这敲回车,它就不会再提示我们这个no ho啊,这个我们的日志文件究竟写在哪儿了。
08:00
那么它这个命令呢,也不会卡住了,那我们在这儿把这个命令复制到。呃,咱们的这个配置文件里替换一下。在保存,那我们在执行。那注意看啊,上次执行23秒是吧。看这一次。来走来,开始跑测试。跑完测试大家看啊,Ec这complete after只用了201毫秒是吧?啊之前呢,我们是大概用了四五秒的时间才成功的,这很有可能直接给我们卡住啊,所以我们优化我们优化一下这个命令啊,接下来这个执行的这个时间呢,也是大大的缩短了。啊,刚才跟大家说的另外一种写法呢,是简化式的写法。
09:03
啊,就是把这个。二大于一这块不要了,我们在这儿呢,直接写一个。按着符来走,哎,直接就呃这个啊,他当然它提示我们退出了啊,然后直接就这个这个这个命令就完成了,它也不会卡在这儿。啊,这个是因为啊,我们之前启动了这么一个。是因为我们之前启动了这么一个这个炸包,我们把它给Q掉,我们再看。1688,然后再执行一下刚刚这条命令。这是简化写法,注意后边的这个and符啊,这不能丢啊,这指的是让它在后台运行。来走没问题对吧,啊在这儿呢,不需要我们二次敲入回车了,然后再看当前的进程。没问题吧,对吧,这是它的这个超时机制,另外就是我们需要注意的一点,就是发送的这个命令啊,千万一定要注意他所需要运行的时间,还有就是它千万别让它卡住啊,具体的配置呢在这儿。
10:11
这个位置如果你的任务执行时间比较长,那你就可以把这个时间呢,给它改的也稍微长一点啊。
我来说两句