当前位置: 首页 > news >正文

网站定制开发成本设计公司和企业的区别

网站定制开发成本,设计公司和企业的区别,华亮建设集团公司主页,国企网站建设要求在几个月前上线的一个采集项目#xff0c;构架是基于java selenium chromedriver chrome实现的采集。至于为哈不直接用jsoup或httpclient实现采集功能#xff0c;是因为很多被采集页面都是通过js来渲染内容的#xff0c;所以必须用webdriverchrome来模拟真正的浏览器访问…在几个月前上线的一个采集项目构架是基于java selenium chromedriver chrome实现的采集。至于为哈不直接用jsoup或httpclient实现采集功能是因为很多被采集页面都是通过js来渲染内容的所以必须用webdriverchrome来模拟真正的浏览器访问来采集。每隔一段时间就会出采集失败问题出现的时间没有规律可能两天出现一次可能一星期出现一次可能一个月出现一次....用linux top命令来查看服务器会发现很多的chromedriver和chrome的进程用ps命令查看服务器ps -aux | grep chrome存在状态为Sl和Z的休眠进程和僵尸进程启动时间都不是当天根据系统本身业务逻辑进程不会存在运行那么长时间的情况。而java进程则全部都能正常关闭但java进程启动的chromedriver和chrome进程不一定能同时关闭目前出现这种问题的原因未找到。最初想用命令把卡死的进程查出来批量杀掉ps -A -o stat,ppid,pid,cmd | grep -e ^[Zz] | awk {print $2} | xargs kill -9 //杀死僵尸进程结果发现只能查杀Z状态的僵尸进程Sl状态的进程一部分是正常的一部分是需要杀死的(启动时间为Nov07,Nov06的进程需要杀掉)至于哪些需要杀死需要通过人工判断启动时间来确定是否需要杀掉进程。之前一直忙时都是先通过ps命令把chromedriver和chrome相关进程查询出来然后通过人工判断进程是否属于休眠状态再手工kill杀掉进程。最近有空了本着能程序解决就绝不要人工维护把之前的手工杀休眠进程操作程序化。一开始想直接通过java的Runtime.getRuntime().exec()代码调用linux命令操作的不过在java常用类库中(https://www.21doc.net/java/awesomejava#processes)找到zt-exec库可以简化命令行调用操作。程序化的代替人工维护实现定时清理休眠进程代码如下import org.apache.log4j.Logger;import org.apache.log4j.RollingFileAppender;import org.zeroturnaround.exec.ProcessExecutor;import org.zeroturnaround.exec.stream.LogOutputStream;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;public class ProcessKill {private static Logger log Logger.getLogger(ProcessKill.class);public ProcessKill(){}public void run(){try{List list new ArrayList();// 先通过ps aux | grep chrome命令获取所有包含chrome文本内容的进程new ProcessExecutor().command(/bin/sh,-c,ps aux | grep chrome).redirectOutput(new LogOutputStream() {protected void processLine(String line) {log.info(line line);List lines split(line.trim());// 判断进程启动时间确定是否为执行超时休眠的进程String time lines.get(8);String format [0-5][0-9]:[0-5][0-9];Pattern p Pattern.compile(format);Matcher m p.matcher(time);boolean result m.find();if(result true) {log.info(time time result);}else{log.info(time xxxxxxxx time result);list.add(lines);}}}).execute();log.info(listsize: list.size());list.forEach(l-{log.info(list line l);});for(int i 0; i list.size(); i){List strs list.get(i);try{String pid strs.get(1);String stat strs.get(7);String time strs.get(8);String cmd strs.get(10);log.info(pid pid , stat , time , cmd);// 通过命令“kill -9 pid”杀掉进程String output new ProcessExecutor().command(/bin/sh,-c,kill -9 pid).readOutput(true).execute().outputUTF8();log.info(kill pid , output);}catch(Exception ex){ex.printStackTrace();}}}catch(Exception e){e.printStackTrace();}}public List split(String s){// ps aux | grep chrome 命令返回字段 USER,PID ,%CPU,%MEM,VSZ, RSS,TTY,STAT,START,TIME,COMMANDList list new ArrayList();int blankCount 0;StringBuffer sff new StringBuffer();for(int i 0; i s.length(); i){char c s.charAt(i);if(list.size() 10){if(c ! ){sff.append(c);blankCount 0;}else if(c ){blankCount;}if(blankCount 1){list.add(sff.toString());sff new StringBuffer();}}else{sff.append(c);}}if(sff.length() 0){list.add(sff.toString());}return list;}public static void setLogFile(String name){Logger rootLogger Logger.getRootLogger();Enumeration en rootLogger.getAllAppenders();while (en.hasMoreElements()){Object obj en.nextElement();if(obj instanceof RollingFileAppender){RollingFileAppender file (RollingFileAppender)obj;file.setFile(name .log);file.activateOptions();}}}public static void main(String[] args){setLogFile(log/ ProcessKill.class.getSimpleName());new ProcessKill().run();}}文末记录下ps和grep命令用法。ps 显示瞬间进程的状态参数-A 所有的进程均显示出来与 -e 具有同样的效用-a 显示现行终端机下的所有进程包括其他用户的进程-u 以用户为主的进程状态 x 通常与 a 这个参数一起使用可列出较完整信息。ps auxUSER该进程属于那个使用者账号。PID 该进程的进程ID号。%CPU该进程使用掉的 CPU 资源百分比%MEM该进程所占用的物理内存百分比VSZ 该进程使用掉的虚拟内存量 (Kbytes)RSS 该进程占用的固定的内存量 (Kbytes)TTY 该进程是在那个终端机上面运作若与终端机无关则显示。另外 tty1-tty6 是本机上面的登入者程序若为 pts/0 等等的则表示为由网络连接进主机的程序。STAT该程序目前的状态主要的状态有R 该程序目前正在运作或者是可被运作S 该程序目前正在睡眠当中但可被某些讯号(signal) 唤醒。T 该程序目前正在侦测或者是停止了Z 该程序应该已经终止但是其父程序却无法正常的终止他造成 zombie (疆尸) 程序的状态START该进程被触发启动的时间TIME 该进程实际使用 CPU 运作的时间。COMMAND该程序的实际指令。ps -ef |grep javaUID 程序被该 UID 所拥有PID 就是这个程序的 IDPPID 则是其上级父程序的IDC CPU使用的资源百分比STIME 系统启动时间TTY 登入者的终端机位置TIME 使用掉的CPU时间。CMD 所下达的是什么指令grep命令的常用格式为grep  [选项]  ”模式“  [文件]常用选项-E 开启扩展(Extend)的正则表达式。-i 忽略大小写(ignore case)。-v 反过来(invert)只打印没有匹配的而匹配的反而不打印。-n 显示行号-w 被匹配的文本只能是单词而不能是单词中的某一部分如文本中有liker而我搜寻的只是like就可以使用-w选项来避免匹配liker-c 显示总共有多少行被匹配到了而不是显示被匹配到的内容注意如果同时使用-cv选项是显示有多少行没有被匹配到。-o 只显示被模式匹配到的字符串。--color :将匹配到的内容以颜色高亮显示。-A n显示匹配到的字符串所在的行及其后n行after-B n显示匹配到的字符串所在的行及其前n行before-C n显示匹配到的字符串所在的行及其前后各n行context查看系统状态下的僵尸进程ps -ef | grep defunct  后面尖括号里是defunct的都是僵尸进程。ps aux | grep -w Z 其中状态为Z的代表僵尸进程。
http://www.zqtcl.cn/news/89543/

相关文章:

  • wordpress加入夜间模式广州seo建站
  • 网站页面优化分析怎样做的英文网站
  • 成功的企业网站案例做网站给女朋友
  • 赤水市建设局官方网站刷leetcode对网站开发有用吗
  • 怎么使用织梦做下载网站电子商务和网站建设区别
  • 介绍自己做衣服的网站莱芜最新钟点工招聘
  • 淘客网站建设教程吉林企业网站模板建站哪个好
  • 网站域名备案地址国外平面设计分享网站有哪些
  • 网站的开发技术官方网站 建设情况汇报
  • 普通电脑可以做网站服务器吗常见的域名注册网站
  • 收费下载的wordpress网站游戏公司
  • 做网站送企业邮箱网站建设注意哪些事项
  • 福州网站建设哪里有网站建设方案
  • 企业网站备案要多少钱网站建设 从入门到精通pdf
  • 网站做我女朋友电商平台网站定制
  • 杭州网站建设出名吕梁营销型网站建设费用
  • 广东手机网站建设哪家专业吉林大学建设工程学院网站
  • 软文广告成功案例湖南网站seo优化
  • 建公司网站要多少钱易班网站建设基础
  • 网站建设技术进行开发分分彩做号网站
  • 一个网站如何赚钱alexa排名与什么有关系
  • 企业建设网站应如何申请中国制造加工网官网
  • 企业网站建设cms系统广源建设集团有限公司网站
  • 网站建设企业免费咨询石家庄楼盘最新消息
  • 一个网站如何做双语网站域名 空间申请表
  • 自建免费网站哪个好下载全网搜
  • 北京网站改版多少钱保护环境做网站素材
  • 网站建设还有需求么做网站 聊城
  • 专业网站优化哪家好昆山有建设网站的吗
  • 网站建设流程六个步骤kencms内容管理系统