java在linux平台,执行本机命令,众所周知都是使用Runtime.getRuntime().exec(command)获取一个Process类
但是都说这种方式各种坑,什么资源消耗大,频繁创建销毁代价大,缓冲区被打满导致死锁什么的
这里不考虑缓冲区死锁问题(因为有解决方案),就想知道这种方式开销有多大,shell频繁场景适用什么技术实现?
有场景如下:有50个shell命令(只是目前水平,后续会更多),java需要定时执行shell,获取结果后解析入库。每个命令的定时时间从1分钟到30分钟不等,这样的场景下Runtime.getRuntime().exec还能用吗,有没有更好的选择?
目前有一种方式,同事因为怕搞不定Runtime.getRuntime().exec的坑,使用jsch封装的方法实现的。
我们都知道jsch是成熟的ssh方案,就是远程执行shell命令,同事在这里直接ssh了自己(本机),然后用jsch做的这个场景。
那么如果用jsch以ssh的方式执行本机命令(ssh自己)的开销又如何呢?