2019独角兽企业重金招聘Python工程师标准>>>

前言

服务器端截图可以做什么?

个人观点:省去跟报表有关的EDM开发,直接从系统上截图,然后发图片给用户就搞定。剩下的自己脑补。

既然这么好,为毛不赶紧弄。需要用到的工具坑太多,没有尝试,不敢拿上去用。

环境准备

如果是window环境就更简单了,大家自行处理,这里不做介绍。

  1. centos6.5(5.x版本来落后了,不要用,会出问题的。其他高级版本,自己掂量着用,公司提供给我的测试机只有6.5版本)
  2. phantomjs 2.x (1.9.x版本的各种bug,测试的时候并发一起来,进程各种crash,所以大家别脑残用1.9.x的)
  3. nodejs  0.12以上版本(因为4.x版本的gcc要求比较高,我又不会装,所以没法测4.x版本的。注意,一定要编译安装,不然会出很多问题。)
  4. 安装windows字体(按网上的说明来,安装完成要重启机器。不安装会出现中文字体不显示的问题)

安装步骤

我知道很多人比较懒,也有很多人,这也不懂,那也不懂。所以为了不让大家浪费时间,给大家安装环境步骤,由于系统是64位,因此下面的步骤都是按64位来。windows环境下的安装,自己看文档。

安装phantomjs 2.x

  1. 到http://phantomjs.org/download.html页面下载相应的版本,https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
  2. 解压 tar -xvfz phantomjs-2.1.1-linux-x86_64.tar.bz2
  3. 创建软链,ln -s 相应phantomjs文件夹/phantomjs /usr/bin/phantomjs   ln -s 相应phantomjs文件夹/phantomjs /usr/local/bin/phantomjs
  4. 测试phantomjs命令能不能使用(如果不可以,大家自己看着办)

安装nodejs0.12.x

参考:http://www.laozuo.org/6421.html

  1. 到官网下载node-v0.12.9.tar.gz,特别注意,是源码,不是编译后的
  2. 解压node-v0.12.9.tar.gz
  3. 进入解压后的文件夹逐步执行两条命令1 ./configure  2 make && make install
  4. 验证node -v 看看版本号是不是跟我们安装的一样

安装windows下的字体

这个直接参考http://www.tuicool.com/articles/VfiqqiA

启动服务

  1. 拷贝源码https://github.com/angrytoro/webshot
  2. 进到根目录后,执行cnpm install来安装相关的模块(因为npm在国内太慢了,经常慢到让你安装错误)
  3. 安装模块成功后,执行node index.js,端口是3000
  4. 在浏览器上浏览

界面介绍

直接给图说明比较方便

截图效果

由于有200kb的图片上传限制,大家将就下,到百度云盘上看qq官网截图效果

http://pan.baidu.com/s/1qXquUkc

并发请求结果

ps(在另外一台服务器上用wrk测试)

介绍下截图服务机器的硬件配置:2核cpu,4g内存

由于我在程序中限定了开启3个phantomjs,每个phantomjs最多同时做5个页面的渲染和截图。因此我开启了15个线程,保持15个链接同时请求,持续1分钟的时间,效果如下图:

五组测试数据统计

序号 网址 持续时间(s) 并发链接 请求总数 成功 失败 崩溃
1 qq.com 60 15 47 47 0 0
2 qq.com 60 15 54 54 0 0
3 qq.com 60 15 45 45 0 0
4 qq.com 60 15 57 57 0 0
5 qq.com 60 15 49 49 0 0
平均 60 15 50.4 50.4 0 0

从中可以看出在截取qq.com的时候,大概平均每秒处理0.84个截图请求。

当然这是在有条件限制的情况下得出的数据,在测试的时候,查看了下cpu的峰值,大概是60%,也就是说这个还有提升的空间。而且我们是用qq.com做测试,如果是比较简单的页面,速度肯定还会提升。

不信请看,我请求http://alinode.aliyun.com/blog/23这个网址的测试

这里数据显示1分钟内总共处理了150个请求。平均每秒处理2.5个。

稳定性

下图是跑了1小时的报告,蛮看看。

在一个小时之内连续的对qq.com首页做截图,总共是处理了562个请求,平均每秒0.16个,太忧伤了。大家有没有发现,其实出现了202个读错误,562个超时,平均网速才225.54kb,诶,这也太坑爹了。

不知道这是什么原因造成的,到底是网速慢了,还是qq官网首页服务器做了安全策略。面对如此惨淡的数据,自信心都没了。

其实在早些时候,有尝试跑一个晚上的并发,可惜好像是因为断网问题,导致测试没有完成。之后有进行了持续6个小时的并发测试,在跑到2个多小时的时候,出现了内存溢出,导致服务中断的情况。非常的忧伤,

我都不知道为毛内存溢出(当时跑去吃饭了),好歹也有3G多的内存可以用。在启动服务后,我有观测,内存从3G多,直接降到2G左右,不过一直在这个区间徘徊,不知道为毛会出现内存溢出。

有两种猜测:

  1. 由于是测试腾讯首页,不知道腾讯会不会出现防御,导致请求页面速度变慢,然后phantomjs一直在等待,各种尝试,导致内存溢出。一般情况下,我们在浏览某个页面的时候,也会出现很卡的情况,浏览器出现假死。
  2. 由于V8的内存限制机制,导致在同时渲染15个页面的时候出现内存溢出。

其实每次的并发测试都会出现超时的情况,这个问题不知道是什么原因造成的。

理论上要渲染一个页面,其实是得花不少时间的,加载页面就大概需要2~3秒的时间,加上渲染大概至少需要5秒左右的时间,有些垃圾网站更长,然后我们还要截图,加起来,这大概得花个6~8秒的时间吧。

总结

按照目前并发测试的结果来说是不适合用于生产环境的。如果要小范围的做生产测试,还需要解决下面几个问题

  1. 将某些计算扔给GPU,毕竟GPU在渲染方面还是比较好的。
  2. 提升v8引擎的内存限制
  3. 查找内存溢出的原因并且解决

后记

服务器端截图还是挺有意思的一件事情,如果稳定性提高了,相信可以用于很多地方。由于代码是写来做测试的,所以写得挺烂的,还有很多可以改进的地方。

如果大家觉得这个点子不错,可以继续开发下去,请到github上点个赞,并给点改进意见。

转载于:https://my.oschina.net/u/137634/blog/613484

node截图服务可用性报告相关推荐

  1. 有了 serverless,前端也可以快速开发一个 Puppeteer 网页截图服务

    更多云原生技术资讯可关注阿里巴巴云原生技术圈. Puppeteer 是什么? puppeteer 官网的介绍如下: Puppeteer is a Node library which provides ...

  2. Serverless 实战 —— 前端也可以快速开发一个 Puppeteer 网页截图服务

    Serverless 实战 -- 前端也可以快速开发一个 Puppeteer 网页截图服务 更多云原生技术资讯可关注阿里巴巴云原生技术圈. Puppeteer 是什么? puppeteer 官网的介绍 ...

  3. NGINX配置基于Node.js服务的负载均衡服务器

    NGINX配置基于Node.js服务的负载均衡服务器 本部署指南说明了如何使用NGINX开源和NGINX Plus在Node.js应用程序服务器池之间平衡HTTP和HTTPS通信.本指南中的详细说明适 ...

  4. 腾讯视频Node.js服务是如何支撑国庆阅兵直播高并发的?

    导语 | 上个月,我有幸参与了腾讯视频国庆阅兵直播页面开发的相关工作,最终,累计观看2.38亿人次,经受住了高并发的考验.在参于Glama框架的开发维护及平时基础建设相关讨论实践中,对高并发有一些部分 ...

  5. 腾讯视频 Node.js 服务是如何支撑国庆阅兵直播高并发的?

    导语 | 上个月,我有幸参与了腾讯视频国庆阅兵直播页面开发的相关工作,最终,累计观看2.38亿人次,经受住了高并发的考验.在参于Glama框架的开发维护及平时基础建设相关讨论实践中,对高并发有一些部分 ...

  6. node.js服务端笔记文档学会写接口,学习分类:path、包、模块化、fs、express、中间件、jwt、开发模式、cors。

    node.js 学习笔记 node.js服务端笔记文档学会写接口,path.包.模块化.fs.express.中间件.JWT.开发模式.cors. gitee:代码接口笔记 1什么是node.js n ...

  7. 转: 从微信的故障谈谈服务可用性

    编者按:本文来自36氪特约作者叶新江(@猪立叶-Anson ).叶新江曾任MSN中国总架构师,现任"个信互动"高级技术副总裁.个信互动公司推出专注于应用推送技术的服务"个 ...

  8. rds基于什么开发_为什么不学基于TypeScript的Node.js服务端开发?

    为什么不学?学不动了吗?!别躺下啊,我扶你起来! 我们早就知道,如今的JavaScript已经不再是当初那个在浏览器网页中写写简单的表单验证.没事弹个alert框吓吓人的龙套角色了.借助基于v8引擎的 ...

  9. Mysql在离线安装时启动失败:mysql服务无法启动,服务没有报告任何错误

    场景 Mysql在Windows上离线安装与配置: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/117563780 在上面进行离 ...

最新文章

  1. adobe怎么统计字数_本科毕业论文怎么写(正文写作要点精华)
  2. 2013-12-2 学习笔记
  3. 学习CSS的背景图像属性background
  4. python 爬虫 scrapy 和 requsts 哪个快_Python爬虫:Scrapy研读之Request/Reponse
  5. 剖析:学思科的未来(一)
  6. 当计算机从硬盘读取数据后 将数据,当计算机从硬盘读取数据后,将数据暂时储存在于()...
  7. Redis内存回收策略
  8. 安卓学习笔记09:常用布局 - 帧式布局
  9. Django去操作已经存在的数据库
  10. 让mysql中行的值拼接_在MySQL中行值包含字符串的SELECT?
  11. oracle 10g在redhat4.6上的安装
  12. 写给本命年24岁的自己和你:这一年决定你的未来
  13. Java实现顺序表的创建及基本操作(增删改查)
  14. es同时支持中文拼音分词(9)
  15. 小刘同学的 virtuoso IC 618 版图初学
  16. linux压缩到最小命令,Linux下压缩某个文件夹命令
  17. DWcs4右下角没有html文件,Dreamweaver cs4 cs5 spry菜单栏使用教程 详细教程 超好珍藏...
  18. Skia深入分析6——skia中图像编解码代码概述
  19. 简要介绍语音识别技术在各领域的应用
  20. 国家邮政局出马,菜鸟顺丰大战落幕

热门文章

  1. rtmp流\http流测试地址
  2. CodeForce 168 C——Wizards and Trolleybuses
  3. linux操作系统之终端
  4. java abstractrequest,Java AbstractJackson2HttpMessageConverter類代碼示例
  5. 实现Linux select IO复用C/S服务器代码
  6. Linux系统编程(九)线程同步
  7. 最常用的设计模式---适配器模式(C++实现)
  8. 【1】TCP三次握手的第三次的 ack包丢失会怎样?
  9. 【大牛疯狂教学】深入拆解java虚拟机百度云
  10. 合并两个链表,去掉重复元素