upgrade tomcat6xx to tomcat7xx with 3 problem3
今天把tomcat从6.0.18升级到7.0.25,发现了两个问题 问题1 java.lang.ClassNotFoundException: org.apache.catalina.mbeans.ServerLifecycleListener 发现居然找不到这个类,然后把catatina.jar下载下来反编译一看mbenas这个文件夹居然是空的 解决办法 6.0.18以前,conf/server.xml里面的配置有这项 注释掉就可以了 问题2 严重: Begin event threw exception java.lang.IllegalArgumentException: taglib definition not consistent with specification version tomcat 6.0.18里面的web.xml里面的tab配置如下 http://java.sun.com/jstl/core /WEB-INF/c.tld tomcat 7.0.25里面web.xml的tag配置应该如下所示 http://java.sun.com/jstl/core /WEB-INF/c.tld 问题2 Aug 11, 2015 10:41:11 AM org.apache.jasper.compiler.JDTCompiler$1 findType SEVERE: Compilation error org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException 原来是JDK的版本问题,系统自是OpenJDK 1.8, 要改回OpenJDK 1.6 yum install java-1.6.0-openjdk
用bash解决hadoop的磁盘空间检查性能问题
项目使用的hadoop已经存放了3000W+的文件, 为了节省成本,当时抢建平台时,使用了组装服务器+普通硬盘 hadoop每次做du操作都非常耗时,于是把hadoop代码改了一个 使用一个bash脚本替代原来du操作。 bash: #/bin/sh mydf=$(df $2 | grep -vE ‘^Filesystem|tmpfs|cdrom’ | awk ‘{ print $3 }’) echo -e “$mydf\t$2” java:hadoop\src\core\org\apache\hadoop\fs\DU.java:168行的toString()及getExecString()方法 public String toString() { return “mydu -sk ” + dirPath +”\n” + used + “\t” + dirPath; } protected String[] getExecString() { return new String[] {“mydu”, “-sk”, dirPath}; } 改造后,原来的du操作其他不耗时。 只是存在统计不准确的问题,不过并不影响hadoop运作。
NginX 1.2.0 versus Resin 4.0.29 performance tests
Recently, we decided to spend some extra time improving Resin’s performance and scalability. Since we like challenges, we set a goal of meeting or beating nginx, a fast C-based web server. When working on performance, we use benchmarks to see which proposed changes improve Resin’s performance, and which proposed changes do not. The autobench/httperf benchmark […]
kingston sd card vs toshiba sd card
前段時間買了一張kingston class10 32G 的SD card,放在D7000上,發現沒有原來的TOSHIBA CLASS4 8G的速度快,於是就個測試工具測試咗一下,O曬嘴。。。。。。 兩張CARD的前後合照: TOSHIBA是09年買的,KINGSTON是前天買的;都是MAKE IN JAPAN。 KINGSTON的讀寫測試: TOSHIAB的讀寫測試: 這說是為什麽KINGSTON這麽便宜的原因了;天下沒有又便又好的東西,別相信什麽 CLASS10標準;然後很多廠家都寫住CLASS10,但實際讀寫速度肯定大打折扣。當然如果你追求是不速度而是容量和價錢,二三線廠家嘅SD CARD是首先。 測試工具:USB Flash Benchmark
Comparing HTML5 Mobile Web Framework
It’s been an exciting year for the mobile Web. Adoption of HTML5 and CSS3, improved performance in mobile browsers, and an explosion of mobile app frameworks mean it’s more feasible than ever to create rich, interactive Web experiences for mobile devices. Using a wrapper like PhoneGap, you can distribute them via the native app stores […]
Asterisk
Asterisk是一款实现电话用户交换机(PBX)功能的自由软件、开源软件。Asterisk提供完善PBX功能,可以连接多种不同的电话终端,包括普通电话机,IP电话机,软电话等,支持多种主流的IP电话协议和系统接口。软件名称Asterisk-星号(*),在Unix(包括Linux)和DOS操作系统中是通配符,用来在查找中适配任何字符,寓意该软件广泛的适用性。 Asterisk软件提供很多以前只有昂贵的专业PBX系统才支持的功能,比如:语音信箱,会议电话,交互式语音应答和自动电话转接等。由于该软件开放的性质,用户可以灵活的配置方便的扩展系统的功能,甚至编程开发自己所需功能的模块。Asterisk通常都运行在Linux操作系统下,当然它也可以在其他系统,如BSD,Windows或OS X下编译并安装。 Asterisk服务器不需要任何特殊的硬件即可提供VoIP的服务,只需服务器有网络连接即可。它支持主流VoIP协议,包括会话发起协议(SIP)、H.323,既可作为IP电话服务器也可以作IP电话和PSTN之间的转接。Asterisk系统还设计了一个新协议,IAX,用于在Asterisk服务器之间维护话路通道。如果需要连接普通电话或PSTN中继线,运行Asterisk的服务器则需要安装相应的硬件接口板。许多厂商都生产用于连接普通电话、T1、E1中继线、ISDN等的接口板。 由于是自由软件且具有丰富的系统功能,Asterisk提供给用户一个廉价并功能强大的PBX解决方案。它被越来越多的用于代替传统专用的PBX,或被用于跨国VoIP电话以节省长途费用。一些国家的VoIP电话公司已经开始支持Asterisk,提供IAX2接口或允许用户的Asterisk服务器使用SIP协议连接。 截止2010年10月28日,Asterisk的最新版本是1.8.0版。 由于Asterisk过于专业,所以目前也存在大量的基于Asterisk开发的容易使用的通信系统,比如在欧美比较流行的elastix、trixbox、或以中文为基础的Freeiris等。 Asterisk主页 Asterisk的主要赞助商和开发支持 Asterisk新闻 Asterisk支持文件计划 Asterisk教学 视频TrixBox/FreePBX教学 Asterisk网页界面管理 O’Reilly Media’s — Asterisk:电话的未来 Asterisk – 初学者的第一步 Asterisk Wiki Asterisk VoIP新闻 Asterisk的正式论坛 Asterisk Army Digium Cards Asterisk中文论坛(简体中文) Asterisk 中文天地
初步试用Squid的替代产品──Varnish Cache网站加速器
Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang (vg.no) 使用3台Varnish代替了原来的12台squid,性能比以前更好。 Varnish的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了cpu内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此squid cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是Varnish cache设计架构。 Varnish可以在FreeBSD 6.0和Linux 2.6内核上运行。 1、编译安装varnish HTTP加速器: 引用 wget http://blog.s135.com/soft/linux/varnish/varnish-1.1.1.tar.gz tar zxvf varnish-1.1.1.tar.gz cd varnish-1.1.1 ./configure –prefix=/usr/local/varnish make && make install 2、简单启动varnish守护进程,用本机80端口去反向代理加速127.0.0.1:81上的Apache服务器: 引用 /usr/local/varnish/sbin/varnishd -a :8080 -b 127.0.0.1:81 -p thread_pool_max=1500 -p thread_pools=5 -p listen_depth=512 -p client_http11=on -w 1,10000,120 Varnish官方网站:http://www.varnish-cache.org/ 另有一份PDF文档,说明Varnish原理的:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2163384 我测试了一下,在同等配置环境下,Varnish的性能确实要超过Squid,稳定性也不错,值得继续去深入研究。 原文地址:http://blog.s135.com/post/290/
使用Varnish代替Squid做网站缓存加速器的详细解决方案
今天写的这篇关于Varnish的文章,已经是一篇可以完全替代Squid做网站缓存加速器的详细解决方案了。网上关于Varnish的资料很少,中文资料更是微乎其微,希望本文能够吸引更多的人研究、使用Varnish。 在我看来,使用Varnish代替Squid的理由有三点: 1、Varnish采用了“Visual Page Cache”技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。 2、Varnish的稳定性还不错,我管理的一台图片服务器运行Varnish已经有一个月,没有发生过故障,而进行相同工作的Squid服务器就倒过几次。 3、通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存,这一点是Squid不能具备的。 下面来安装Varnish网站缓存加速器(Linux系统): 1、创建www用户和组,以及Varnish缓存文件存放目录(/var/vcache): /usr/sbin/groupadd www -g 48 /usr/sbin/useradd -u 48 -g www www mkdir -p /var/vcache chmod +w /var/vcache chown -R www:www /var/vcache 2、创建Varnish日志目录(/var/logs/): mkdir -p /var/logs chmod +w /var/logs chown -R www:www /var/logs 3、编译安装varnish: wget http://blog.s135.com/soft/linux/varnish/varnish-1.1.2.tar.gz tar zxvf varnish-1.1.2.tar.gz cd varnish-1.1.2 ./configure –prefix=/usr/local/varnish make && make install 4、创建Varnish配置文件: vi […]
Android多线程断点续传下载文件类设计
对于Android平台,很多网友可能考虑开发一个软件商店,对于Android平台上如何实现断点续传操作呢? 这里给大家一些思路和原理的介绍,同时在Android手机上要考虑的一些事情。 1. 流量控制,获取运营商的接入方式,比如说使用移动网络接入,尽可能的提示用户切换WiFi或提示,限制下载的流量以节省话费。 2. 屏幕锁控制,屏幕锁屏后导致应用会被挂起,当然Android提供了PowerManager.WakeLock来控制。 3. 对于断点续传,这要追溯到Http 1.1的特性了,主要是获取文件大小,如果这个无法读取的话,那么就无法断点续传了只能使用chunked模式了,当然获取远程服务器上文件的大小可以通过Http的响应头查找Content-Length。 4. 获取上次文件的更改时间,对于断点续传来说比较有风险的就是 继续下载的文件和早期下载的在server上有变动,这将会导致续传时下载的文件版本和原始的不同,一般有两种解决方法,早期我们配置服务器时通过Last-Modified这个http header获取文件上次修改时间,不过本次Android开发网推荐使用更为强大的ETag,ETag一般用于解决同一个URL处理不同返回相应,比如Session认证,多国语言,以及部分黑帽的SEO中。具体的实现大家可以参考RFC文档。 5. 考虑服务器的3xx的返回,对于专业的下载文件服务器会考虑到负载平衡问题,这就涉及到重定向问题,处理重定向使用Android的Apache库处理比较好。 6. 至于多线程,这里CWJ提示大家可能存在独立的线程下载一个文件,和多个线程分块下载单个文件之分,其中后者需要考虑上次下载数据是否存在问题,同时如果服务器不支持文件大小获取,则无法通过分段下载数据,因为不知道如何分段,所以在chunked模式中,只能使用一个线程下载一个文件,而不是多个线程下载一个文件。 7. 下载后的数据效验,可以考虑CRC等方式,当然对于一般的传输只要逻辑不出现问题,基本上不会有偏差。 8. 考虑DRM问题,这个问题在国内用的比较少,而国外的受数字保护的音乐和视频,需要额外的获取证书等。 9. 重试次数,对于一个文件可能在本次网络传输中受到问题,尤其是移动网络,所以可以设置一定的重试次数,让任务单独的走下去。 10. 线程开发方式,这里如果你的Java基础比较好,推荐直接使用Java并发库API比较好,如果过去只做过Java开发使用Thread即可,如果Java技术不过关可以Android封装的AsyncTask。 原文地址:http://www.android123.com.cn/androidkaifa/932.html
浏览器与服务器交互原理以及用java模拟浏览器操作
* 1,在HTTP的WEB应用中, 应用客户端和服务器之间的状态是通过Session来维持的, 而Session的本质就是Cookie, * 简单的讲,当浏览器向服务器发送Http请求的时候, HTTP服务器会产生一个SessionID,这个SessionID就唯一的标识了一个客户端到服务器的请求会话过程. * 就如同一次会议开始时,主办方给每位到场的嘉宾一个临时的编号胸牌一样, 可以通过这个编号记录每个嘉宾(客户端)的活动(请求状态). * 为了保持这个状态, 当服务端向客户端回应的时候,会附带Cookie信息,当然,Cookie里面就包含了SessionID * 客户端在执行一系列操作时向服务端发送请求时,也会带上这个SessionID, 一般来说,Session也是一个URL QueryParameter ,就是说,session可以以Key-Value的形式通过URL传递 * 比如,http://www.51etest.com/dede/login.php?PHPSESSIONID=7dg3dsf19SDf73wqc32fdsf * 一般而言,浏览器会自动把此Session信息放入Header报文体中进行传递. * 如果浏览器不支持Cookie,那么,浏览器会自动把SessionID附加到URL中去. * * 2,在这个例子中,以登陆这个功能点进行讲解. * 首先,我们登陆的页面是http://www.51etest.com/dede, 我们第一次访问这个页面后,可以从服务器过来的Http Response报文中的Header中找出服务器与浏览器向关联的数据 — Cookie, * 而且Session的值也在Cookie中. 于是,我们可以通过分析Set-Cookie这个Header中的参数的值,找到Seesion的Key-Value段. * 然后,我们再向服务器发送请求,请求URL为:post@@http://www.51etest.com/dede/login.php@@userid=admin&pwd=tidus2005&gotopage=/dede/&dopost=login * 服务器验证登陆成功了, 并且在此次会话变量中增加了我们登陆成功的标识. * * 3,增加一个广告定义 * 增加一个广告定义其实就是一个添加数据的过程,无非是我们把我们要添加的数据通过参数的形式告诉指定url页面,页面获取后添加到数据库去而已. * 此url地址为: * post@@http://www.51etest.com/dede/ad_add.php@@dopost=save&tagname=test&typeid=0&adname=test&starttime=2008-05-29 * 因为这个页面会先判断我是否登陆 * 而判断的依据,前面讲了,就是根据我请求时的SessionID找到指定的Session数据区中是否存在我的登陆信息, * […]