linux的CPU负载均值

当运行在Linux上的程序有问题之后,我们通常要看一下当前CPU和内存的使用情况来分析一下问题 对于CPU的使用率,通常用Load Average,也就是负载均值来度量 负载均值是啥? 负载是啥,负载就是对CPU使用率的一个计量,均值就是某一段时间内的一个平均值。 怎么看啊? 直接输入w命令 # w 20:02:51 up 23 days, 8:10, 2 users, load average: 1.20, 1.28, 1.29 第一位1.20:表示最近1分钟平均负载 第二位1.28:表示最近5分钟平均负载 第三位1.29:表示最近15分钟平均负载 或者uptime命令 $ uptime 09:50:21 up 200 days, 15:07, 1 user, load average: 0.27, 0.33, 0.37 我们一般认为0.00表示无负载,可以理解为CPU空闲,1.00表示CPU满负载,但是注意,1.00是对于单cpu来说的,也就是说,如果是双核,那么这个满负载显示的值应该是2.00,以此类推。 怎么看我是几核啊 grep 'model name' /proc/cpuinfo | wc -l 通过统计cpuinfo的model name信息来算的 这三个值哪个重要? 一分钟内突然负载很大没关系,当然如果你要排查也没人拦着,如果15分钟的负载均值超过cpu的数目,就要关注了。 那什么就是理想负载呢? 以单个cpu为例,1.00表示cpu满负载运行,没有一点点浪费,实际上,有些管理员认为0.7也许是理想的状态。如果你的经常超过0.7,那么最好查一查。

2014-03-08 · 1 min · bystander

eclipse管理多个workplace

由于eclipse用的比较多,管理多个workplace很麻烦,经常需要打开以后再切换,简单介绍个方法。 一 1.进入Eclipse的安装目录,鼠标点击eclipse.exe,右键菜单–>发送到–>桌面快捷方式 2.到桌面上找到“eclipse.exe - 快捷方式”,鼠标右键点击查看属性,弹出菜单中选择“快捷方式”标签,然后在“目标”中增加内容:-data e:\workspace,保存后即可 3.双击这个快捷方式,eclipse就会使用e:\workspace作为工作空间启动。 这样你多复制几个,就好了。 二 1.找个目录,新建一个文件夹,名称为workspace_aaa 2.然后在当前目录下新建一个txt文件 3.输入内容为: start E:\eclipse\eclipse.exe -data workspace1 说明:前面是eclipse的路径,中间加上"-data” ,后面为工作空间的路径,start要有,不然打开eclipse之后,命令行窗口不会自动消失的,很是碍眼。 4.将这个txt保存为workspace1.bat 5.双击这个workspace1.bat,eclipse就会使用workspace1.bat 作为工作空间启动。 对launchy党来说,新建个目录,然后创建好多个bat,以后直接快速启动真是太方便了

2014-03-08 · 1 min · bystander

尝试JavaFX开发

曾经有报道说JavaFX将使java在桌面开发上大有作为,感觉好像是很高端的样子,今天尝试了一下,界面对于自用的工具来说,本来也不多重要,只是一个简单的尝试 简单说下大致的步骤和一些思路,可能有错误。 javafx需要sdk支持,java7之后的都有的。设计思路是数据和代码分离,界面通过xml或json数据来描述,这样就把业务逻辑代码和界面实现代码分开了 一个简单的开发过程应该是这样的 1.使用JavaFX Scene Builder来绘制界面,保存为xml/json格式 画的话没啥要说的,了解一下基本的整体概念就行。 2.在eclipse里新建工程,可以是普通工程,将1中的文件放到资源目录,在代码里加载,然后界面就加载成功了。 Node topNode = FXMLLoader.load(AFI.class.getResource("/afimain.fxml")); 逻辑代码,比如一个简单的按钮事件可以通过 Node node = topNode.lookup("#paneRightBottom"); 来查找到id为paneRightBottom的元素,然后就可以通过对node添加事件监听器来完成一些功能了 主要想说的是: JavaFX和WPF其实思路是一模一样的,恰好WPF我也用过,感觉两个都没搞起来,虽然界面炫,然后我去维基看了下: 该产品于2007年5月在JavaOne大会上首次对外公布。JavaFX技术主要应用于创建Rich Internet application(RIAs)。JavaFX期望能够在桌面应用的开发领域与Adobe公司的AIR、OpenLaszlo以及微软公司的Silverlight相竞争 已经7年了,用户数应该是非常少的,成熟的商业型产品也没几个,在尝试的过程中,我在stackoverflow,以及一些很不错的java博客上,大量查找基本也没有太多的信息,都是一些很浅的应用,包括stackoverflow上的回答数,基本还是能反映出来的,主要应用于RIA,而当前RIA已经出html5的天下了。SL早都不更新了,这种坑爹的所谓新技术。 Oracle还是好好把Swing搞好吧。。不建议尝试。

2014-02-11 · 1 min · bystander

[笔记]写代码遇到的一些问题汇总下

本篇是用来填上一篇 挖下的坑的。 1.java调用webservice 有一些已有的webservice服务,由xfire生成发布,有些有参数,有些无参数,无参数的直接我直接使用org.codehaus.xfire这个包里的Client来动态生成客户端。然后调用就可以了。非常简单 Client client = null; try { client = new Client( new URL( "http://leaver.me/testService?wsdl")); client.invoke("refreshAllCache", new Object[0]); } catch (MalformedURLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } 但对于有参的,且是服务器自定义的类作为参数的时候,实在是搞不定。。不管是把自定义的类放到本地,包名一致,在invoke的时候生成这个对象还是其他什么方法。都无法完成。 最终换了直接发送soap报文来完成。dirty hack啊。如果你有一些好的方法希望不吝赐教。 解决方案来源自stackoverflow,因为stackoverflow现在国内好像有时候打不开。因此把代码贴过来。有疑问的话留言讨论。 import javax.xml.soap.*; import javax.xml.transform.*; import javax.xml.transform.stream.*; public class SOAPClientSAAJ { /** * Starting point for the SAAJ - SOAP Client Testing */ public static void main(String args[]) { try { // Create SOAP Connection SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); SOAPConnection soapConnection = soapConnectionFactory.createConnection(); // Send SOAP Message to SOAP Server String url = "http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx"; SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url); // Process the SOAP Response printSOAPResponse(soapResponse); soapConnection.close(); } catch (Exception e) { System.err.println("Error occurred while sending SOAP Request to Server"); e.printStackTrace(); } } private static SOAPMessage createSOAPRequest() throws Exception { MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage soapMessage = messageFactory.createMessage(); SOAPPart soapPart = soapMessage.getSOAPPart(); String serverURI = "http://ws.cdyne.com/"; // SOAP Envelope SOAPEnvelope envelope = soapPart.getEnvelope(); envelope.addNamespaceDeclaration("example", serverURI); /* Constructed SOAP Request Message: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:example="http://ws.cdyne.com/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <example:VerifyEmail> <example:email>[email protected]</example:email> <example:LicenseKey>123</example:LicenseKey> </example:VerifyEmail> </SOAP-ENV:Body> </SOAP-ENV:Envelope> */ // SOAP Body SOAPBody soapBody = envelope.getBody(); SOAPElement soapBodyElem = soapBody.addChildElement("VerifyEmail", "example"); SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("email", "example"); soapBodyElem1.addTextNode("[email protected]"); SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("LicenseKey", "example"); soapBodyElem2.addTextNode("123"); MimeHeaders headers = soapMessage.getMimeHeaders(); headers.addHeader("SOAPAction", serverURI + "VerifyEmail"); soapMessage.saveChanges(); /* Print the request message */ System.out.print("Request SOAP Message = "); soapMessage.writeTo(System.out); System.out.println(); return soapMessage; } /** * Method used to print the SOAP Response */ private static void printSOAPResponse(SOAPMessage soapResponse) throws Exception { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); Source sourceContent = soapResponse.getSOAPPart().getContent(); System.out.print("\nResponse SOAP Message = "); StreamResult result = new StreamResult(System.out); transformer.transform(sourceContent, result); } } 2.Access restriction on class due to restriction on required library rt.jar? 报错 ...

2014-02-08 · 4 min · bystander

[笔记]写代码遇到的一些问题汇总上

今天大雪,天冷,不能出去玩了。把保存在pocket里的一些记录总结一下,太懒了。。下篇等我去了上海用我电脑写吧 1.java模拟https登陆 首先我要登陆,然后保存cookie,然后利用cookie来访问后续的网页,发包,处理包这样,然后,为了方便,我选择了 org.apache.http 这个库,典型的一个登陆场景应该是这样的,以后遇到问题一定先要去看官方的例子,别人给出的例子一般要么是不能用,要么是用的方法都是一些过时的,虽然能用,但看到警告还是不舒服。 public static BasicCookieStore cookieStore; //整个过程用一个client public static CloseableHttpClient httpclient; cookieStore = new BasicCookieStore(); httpclient = HttpClients.custom().setDefaultCookieStore(cookieStore).build(); //先访问一下首页,然后cookie、会填充进来 HttpGet httpget = new HttpGet("https://leaver.me/index.htm"); httpclient.execute(httpget); CloseableHttpResponse responseCookie = null; //然后post请求登陆 HttpPost httpost = new HttpPost("https://leaver.me/login.htm"); //通过键值对来作为post参数 List < NameValuePair > nameValuePairs = new ArrayList < NameValuePair > (1); nameValuePairs.add(new BasicNameValuePair("loginType", "1")); nameValuePairs.add(new BasicNameValuePair("loginName", username)); nameValuePairs.add(new BasicNameValuePair("Password", password)); httpost.setEntity(new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8)); CloseableHttpResponse responLogin = null; responLogin = httpclient.execute(httpost); 但是,这个过程报了如下的错 e: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target google之,发现时访问https的原因。需要先安装对应站点的证书。这里要用到一个通用的java类,我贴下链接 编译这个工具类,然后执行java InstallCert <host>[:port] 会生成一个证书文件 然后在项目里通过 System.setProperty("javax.net.ssl.trustStore", "证书路径"); 设置即可,你可以吧证书文件放到资源目录,就更好了。 2.java正则替换反斜线 我在某个地方需要把字符串里的所有反斜线替换成两个,我就写了 str.replaceAll("\\","\\\\") 结果发现我还是too young,实际上, java replaceAll() 方法要用 4 个反斜杠,表示一个反斜杠 例如 str1="aa\bbb"; 要想替换成 str1="aa\\bbb"; 必须这样替换: str1 = str1.replaceAll("\\\\", "\\\\\\\\"); 原因如下: String 的 replaceAll() 方法,实际是采用正则表达式的规则去匹配的, \\ ,java解析为\交给正则表达式, 正则表达式再经过一次转换,把\转换成为\ 也就是java里面要用正则来表示一个. 必须写成4个\ 如果要表示\,那就要写8个\ 所以如果写成: str1 = str1.replaceAll("\", “\\”); 就会报正则表达式的错误。 3.httpClient如何模拟表单上传文件 这个还是要去看官方例子,网上没找到,需要添加 org.apache.http.entity包 //文件部分 FileBody csvFile = null; //表单的其他部分 StringBody filelog = null; StringBody dataItemDefine = null; csvFile = new FileBody(new File(file)); filelog = new StringBody("ADD", ContentType.TEXT_PLAIN); dataItemDefine = new StringBody(GlobalSetting.getValueOfKey(type), ContentType.TEXT_PLAIN); //关键代码,此处来构造请求数据 HttpEntity reqEntity = MultipartEntityBuilder.create().addPart("filelog", changeLogAction).addPart("dataItemDefine", dataItemDefine).addPart("fileName", csvFile).build(); HttpPost httppost = new HttpPost("https://leaver.me/uploadFile.action"); httppost.setEntity(reqEntity); CloseableHttpResponse response = null; response = httpclient.execute(httppost); 其他都和普通的post请求没啥区别了 ...

2014-02-04 · 2 min · bystander

Java动态代理实例

首先什么是代理? 所谓代理呢也就是在调用实现类的方法时,可以在方法执行前后做额外的工作,这个就是代理。 那动态代理呢,官方解释是: Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架。 老湿,你说的是个毛啊,完全没看懂啊! 我更喜欢另一种通俗的解释,官方的解释总是高度抽象的,等用了一段时间才能理解体会 动态代理实现了日志和业务的分开,也就是某个类只是要提供了某些业务,比如银行取款业务。这个类实现了取款业务的同时也需要实现日志功能,如果不用动态代理的话,那么由此一来该类代码里面已经额外地添加了自己不该添加的日志功能能代码。所以我们就得使用动态代理把它的业务代码和日志功能代码分开。所以用到了动态代理概念,spring里面的AOP就是一个很好的例子。 不直观啊,老湿,能再给力一点不? 额,这样的话,我们来看一个例子,要用到的两个类 实现java.lang.reflect.InvocationHandler接口提供一个执行处理器,也就是真正做事的,然后通过java.lang.reflect.Proxy得到一个代理对象,通过这个代理对象来执行业务方法,在业务方法被调用的同时,执行处理器会被自动调用。 记住,动态代理只能对接口 首先业务接口: public interface HelloWorld { public void sayHelloWorld(); } 然后我们是这样写的实现 public class HelloWorldImpl implements HelloWorld { public void sayHelloWorld() { System.out.println("Hello World!"); } } 后来我们觉得执行这个方法前能不能做点其他啥事呢,比如写个日志?见个妹子?啥,这段代码不让改了,改了的话,业务方法和日志混合的一塌糊涂啊,以后想改个日志格式你来写啊 那我们就得定义一个拦截器/执行处理器了。 public class HelloWorldHandler implements InvocationHandler { //目标对象 private Object targetObject; public HelloWorldHandler(Object targetObject){ this.targetObject = targetObject; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("方法调用前"); Object result = method.invoke(this.targetObject, args); System.out.println("方法调用结束"); return result; } } 这客户端咋用啊,老湿 public class HelloWorldTest { public static void main(String[] args) { //业务对象 HelloWorld obj = new HelloWorldImpl(); //拦截器对象 HelloWorldHandler handler = new HelloWorldHandler(obj); //返回业务对象的代理对象 HelloWorld proxy = (HelloWorld)Proxy.newProxyInstance( obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), handler); //通过代理对象执行业务对象的方法 proxy.sayHelloWorld(); } } 看到没,通过Proxy类的newProxyInstance方法,传入类加载器,类接口,和这个处理器,我们就获得一个代理 执行结果是这样的 方法调用前 Hello World! 方法调用结束 恩,电脑没死机,是这样的

2013-11-24 · 1 min · bystander

Maven提示缺少tools.jar

记录一下。 这两天在熟悉Maven,长见识了.后续可能的话会写上一两篇,今天配置的时候提示tools.jar文件。于是使用everything搜了一下,本机的jdk目录还真没有,最后搜了一下,发现是安装jdk时候的问题,具体就是因为安装jdk的时候,后面被让继续安装jre,这个时候,我为了方便,将jre安装在了jdk的目录里,结果导致jre会覆盖到jdk的这两个文件。同时还会覆盖dt.jar这个包,于是,就没了。。这个问题略隐晦了.. 重新安装了jdk,将jdk和jre分开目录,然后设置一下jdk的lib目录到classpath就可以了,问题解决。

2013-09-19 · 1 min · bystander

Unix sed实用教程系列目录

本系列文章已经译完了,译自awk-sed@theunixschool,收获颇丰,作者没有将明白的我做了补充,并且尝试讲的更清楚,整理成系列索引,方便学习,开篇非译文,是我为了方便后面的理解写的一篇,感谢原作者的分享.有任何问题欢迎留言讨论. Unix sed实用教程开篇 [译]Unix sed实用教程第一篇–向文件中增加一行 [译]Unix sed实用教程第二篇–替换文件内容 [译]Unix sed实用教程第三篇–读写文件 [译]Unix sed实用教程第四篇–选择性打印 [译]Unix sed实用教程第五篇–替换文件内容续 [译]Unix sed实用教程第六篇–删除文件内容 [译]Unix sed实用教程第七篇–输出文件内容(10 Demo) [译]Unix sed实用教程第八篇–CSV文件操作

2013-08-11 · 1 min · bystander

Unix sed实用教程开篇

已经看了一段时间的Linux Shell编程了,也能完成一些基本的使用,为了加深理解,恰好看到了The Unix School的一个sed&awk教程,不是简单的命令参数堆积,而是一个相当实用的系列,因此,希望能在几天内完成翻译.翻译过程不会逐字翻译,会穿插一些注释,包括自己的一些理解和其他的一些引用,作为开篇,简单说一下sed的工作机制,对后面的理解会有很大帮助。 sed是什么: sed是一个非交互式的流编辑器(stream editor)。所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出;而所谓流编辑器,是指sed每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕(除非取消了屏幕输出又没有显式地使用打印命令),接着读入下一行。整个文件像流水一样被逐行处理然后逐行输出。(via Walk in Mindfields ) sed工作机制: sed维护两个缓冲区,pattern space和hold space,命令开始执行之前都为空。 pattern space缓冲区用于临时保存每次读取的一行的内容,大部分的匹配和替换等等操作都是针对pattern space中的内容进行的,因此不会对输入文件有任何影响,而hold space则作为后备缓冲区使用,除非指定了一些特殊的命令(例如D删除命令),否则pattern space中的内容会在处理完一行之后清空,但hold space中的内容在处理完每一行时不会被删除。 也就是说pattern space相当于我们的内存,hold space相当于硬盘.处理的时候在内存里,处理过的就放回硬盘.(这是我的理解,有一点点不恰当,但是因此一些概念会比较好理解.) 具体来说,可以大致分为以下几步: 1.首先,从标准输入流读取一行,移除换行符,然后存入pattern space中 2.执行指定的命令,(每个命令都有一个可选的地址(可以是行号,也可能是一个正则表达式匹配),这个地址作为一个执行命令前的测试,指定了需要对那些行进行操作。当前行只有匹配的情况下才会执行命令。) 3.当指定所有的命令都执行完了之后,pattern space内容就被处理过了,sed默认会将pattern space中的内容打印到标准输出中,移除的换行符也会打印出来。本行操作完成。 4.然后sed会读取下一行的内容,再次执行相同的操作。直到行尾。 基本上最基础的理论就差不多了.主要是这个工作机制比较重要.后面从示例中慢慢加深理解.

2013-08-09 · 1 min · bystander

《软件测试》一点笔记

这两天在读《软件测试》,书不厚,也就300页,有些观念还是挺诧异的,比如软件功能超出产品说明书也算作软件缺陷…想想也能明白,只是猛然看到还是很惊异..简单记录一下读书过程中一些重要的笔记.留作备份. 软件缺陷: 1.软件为达到产品说明书表明的功能 2.软件出现了产品说明书指明不会出现的错误. 3.软件功能超出产品说明书指明范围 4.软件未达到产品说明书虽未指出但应达到的目标 5.软件测试员认为软件难以理解,不易使用,运行速度缓慢,或者最终用户认为不好. 为什么会出现软件缺陷 最大的原因是产品说明书.而并非编程错误,第二大来源是设计方案 软件测试员的目标是发现软件缺陷,进可能早一些,确保其得到修复 完全测试程序是不可能的 不要总是报告坏消息,如果软件没有错误,就夸他们,和他们聊天 可靠性只是质量的一个方面,可能还包括功能齐全,技术制裁,包括色彩等 在设计和执行测试案例时,首先进行通过测试,在破坏性试验之前看看软件基本功能是否实现是很重要的,否则在正常使用软件时就会奇怪为什么有这么多软件缺陷 软件测试员必须测试程序的状态及其转换 动态白盒测试的目标是寻找软件缺陷,调试则是为了修复他们 静态黑盒子(审查设计说明书),动态黑盒子,静态白盒子,动态白盒子 进行白盒测试前,一定要根据说明书建立黑盒测试案例 语句覆盖是程序的所有语句执行,分支覆盖则是所有分支都被执行,条件覆盖则要保证IF语句的每一种可能性都被覆盖 优秀UI的七个要素: 1.符合标准和规范,2.灵活性,3.正确性。4.直观性。5.舒适性,6.实用性。7.一致性 测试存根用于自顶向下的测试,清查到低级模块或者把自己替换为低级模块,主要测试高级模块,外表和行为就像是低级模块

2013-07-26 · 1 min · bystander