qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

Linux下测试磁盘的读写IO速度

 有时候我们在做维护的时候,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进行下一步的决策.
  下面是两种测试方法:
  (1)使用hdparm命令
  这是一个是用来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written by Mark Lord <mlord@pobox.com>, the primary developer and maintainer of the (E)IDE driver for Linux, with suggestions from many netfolk).该命令应该也是仅用于Linux系统,对于UNIX系统,ATA/IDE硬盘用的可能比较少,一般大型的系统都是使用磁盘阵列的.
  使用方法很简单
# hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads: 6676 MB in 2.00 seconds = 3340.18 MB/sec
Timing buffered disk reads: 218 MB in 3.11 seconds = 70.11 MB/sec
  可以看到,2秒钟读取了6676MB的缓存,约合3340.18 MB/sec;
  在3.11秒中读取了218MB磁盘(物理读),读取速度约合70.11 MB/sec
  (2)使用dd命令
  这不是一个专业的测试工具,不过如果对于测试结果的要求不是很苛刻的话,平时可以使用来对磁盘的读写速度作一个简单的评估.
  另外由于这是一个免费软件,基本上×NIX系统上都有安装,对于Oracle裸设备的复制迁移,dd工具一般都是首选.
  在使用前首先了解两个特殊设备
  /dev/null 伪设备,回收站.写该文件不会产生IO
  /dev/zero 伪设备,会产生空字符流,对它不会产生IO
  测试方法:
  a.测试磁盘的IO写速度
# time dd if=/dev/zero of=/test.dbf bs=8k count=300000
300000+0 records in
300000+0 records out
10.59s real 0.43s user 9.40s system
# du -sm /test.dbf
2347 /test.dbf
  可以看到,在10.59秒的时间里,生成2347M的一个文件,IO写的速度约为221.6MB/sec;
  当然这个速度可以多测试几遍取一个平均值,符合概率统计.
  b.测试磁盘的IO读速度
# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
19214 9545 8693 53% /
/dev/sda1 99 13 82 14% /boot
none 506 0 506 0% /dev/shm
# time dd if=/dev/mapper/VolGroup00-LogVol00 of=/dev/null bs=8k
2498560+0 records in
2498560+0 records out
247.99s real 1.92s user 48.64s system
  上面的试验在247.99秒的时间里读取了19214MB的文件,计算下来平均速度为77.48MB/sec
  c.测试IO同时读和写的速度
# time dd if=/dev/sda1 of=test.dbf bs=8k
13048+1 records in
13048+1 records out
3.73s real 0.04s user 2.39s system
# du -sm test.dbf
103 test.dbf
  上面测试的数据量比较小,仅作为参考.
  相比两种方法:
  前者是linux上专业的测试IDE/ATA磁盘的工具,但是使用范围有局限性;(此试验仅仅使用了测试磁盘IO的参数,对于其他参数及解释参考man手册)
  后者可以通用,但不够专业,也没有考虑到缓存和物理读的区分,测试的数据也是仅作参考,不能算是权威.

posted @ 2014-04-04 11:44 顺其自然EVO 阅读(282) | 评论 (0)编辑 收藏

python批量导入MongoDB数据库

 由于源文件不是MongoDB支持的JSON和BSON 格式的数据, 所以只能将源数据转变格式后, 用脚本将其导入,所测数据为中科院信工所提供的数据。(这也是在信工所接触的第一个写程序的活。)源码如下:
#!/usr/bin/env python
#encoding:utf-8
###################################
# function: analysis the log in the 'die' to JSON , and
#output the data to the MongoDB.
# data:  2014/3/31
#History: 1.0
###################################
import os
import pymongo
def connect_mongodb():
servers="mongodb://localhost:27017"
conn = pymongo.Connection(servers)
print conn.database_names()
db = conn.my_mongodb            #连接库
return db
def str_process(string,db):
d={}
if string == '\n':
return
string2=str(string)
print '-----'+string
string2=string2.split(' ')
print '---------------'
print string2
for i in string2:
print i
print '------------'
string2[3].split('\n')
d['projectcode']=string2[0]
d['pagename']=string2[1]
d['pageview']=string2[2]
d['bytes']=string2[3][:-1]
db.user.insert(d)
def file_process(source_file,db):
string2=''
f=open(source_file,'r')
print 'file name :'+source_file
while True:
string2=f.readline()
if string2 == '':
break
string2=str_process(string2,db)
print string2
def get_dir_list(dir):  #input the dir ,will output the all filename
dat0=[]
for i in os.listdir(dir):
dat0.append(i)
return dat0
def all_file_process():
dir_file_name=''
dir_list=[]
dir_file_name=raw_input('please input the dir name:')
dir_list=get_dir_list(dir_file_name)
print dir_list
db=connect_mongodb()
for i in dir_list:
if str(i) != 'log_file_process.py':
file_process(str(i),db)
all_file_process()

posted @ 2014-04-03 11:26 顺其自然EVO 阅读(745) | 评论 (0)编辑 收藏

java实现list清除重复的字符串

package com.zhangle.arithmetic;
import java.util.ArrayList;
import java.util.List;
public class ClearRepeat {
/**
* @param args
*/
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("abc");
list.add("efg");
list.add("ghi");
list.add("ghi");
list.add("ghi");
list.add("efg");
for (int i = 0; i < list.size();i++) {
int j=list.lastIndexOf(list.get(i));
if (i!=j) {
list.remove(j);
i--;//每次有重复都让i回到初始位置,i==j时才可以向下循环
}
}
System.out.println(list);
}
}

posted @ 2014-04-03 11:24 顺其自然EVO 阅读(445) | 评论 (1)编辑 收藏

我们正在路上—从持续集成到持续发布

 持续集成作为一种很好的软件工程实践被很多团队所采用,和其他一些先进的实践一样,它最终的目的一定是服务于产品的。产品的价值最终体现在用户体验的提升,而这个的前提就是产品的每一次更新能够及时地传递给用户,对于运维团队来说就是更快地在生产环境中部署最新的产品,对于研发团队来说就是更频繁地发布可以工作的软件。
  暂且抛开业界非常流行的DevOps理念,单纯地从研发团队来看,如何快速的发布对用户有价值的软件是重中之重。
  那结合持续集成,我们又可以做些什么呢?
  先来看看我们持续集成的现状
  独立的环境:持续集成往往有一套独立的测试环境,而团队还会在其他测试环境中进行测试,两者似乎从来没有交集
  独立的构建:持续集成往往就是对当前最新的代码做一些自动化的测试,而完全忽略了软件版本的管理,甚至不能很好的保证各种测试是否是基于同一份代码
  辅助手段:持续集成往往作为一种测试的辅助手段,更多的是用于快速发现代码提交阶段的错误
  以上这些在持续集成初期完全没有问题,而且这种方式也的确带来了不少的价值,能够帮助团队更透明地了解产品的质量,并且快速的定位和解决问题。只是,我们可以做的更多
  再来展望下持续发布的流程
  整体的思路就是以持续集成流水线作为核心,把软件发布的各个环节透明地展示给团队,并且通过流水线来管理版本的发布流程
  测试环境整合:打通持续集成环境/手工测试环境/线上模拟环境,保证一条流水线上使用同一份代码,同一份构建物
  测试流程整合:一键式的环境部署和一键式的版本管理(打TAG,拉分支,构建物的存储等),发布前对产品质量有清晰的了解
  重要和主要手段:以持续发布流水线为基准,并积极拓展其他类型的测试
  把持续集成融入到产品开发和发布阶段,而不是简单地搭建一套“自动化运行任务”,并充分利用构建流水线实现流程和质量的双重把控
  最后来看下某个产品初步定义的持续发布的流程
  产品现状
  三套环境:持续集成环境(云主机),手工测试环境(云主机),线上模拟环境(物理机)
  持续集成状态
  自动化的编译,打包,部署,冒烟测试和快速性能测试已经实现自动化并实时通过代码提交触发,全程20分钟左右
  单元测试和静态代码检查还在完善中,也实时通过代码提交触发,不过没有列入关键点,也就是成功与失败并不直接影响构建流程
  每日的功能测试(1000+个测试用例)在晚间运行,全程3个小时左右
  新功能测试在手工测试环境下进行
  上线前需要在线上模拟环境进行性能测试和稳定性测试

 持续发布流水线
  持续集成环境实时保证当前的提交没有破坏基本功能
  通过手工触发(QA人员控制),一键部署产品到手工测试环境并能在流水线上展示手工测试结果(通过简单的设置一个变量达到效果);同时可以选择触发功能测试,达到同步的执行
  如果QA人员认为当前测试版本可以达到内部发布要求,可以一键打TAG,并生成和存储dist包
  通过手工触发(QA人员控制),一键部署dist包到模拟线上环境,而后自动化进行性能测试和稳定性测试
  理想状态这步应该是自动触发,由于目前机器的不可独占性,暂时只能手工触发
  自动化的性能测试和稳定性测试还是实施中
  最终版本的对外发布也是通过手工触发(QA人员控制)
  以上的流程是根据项目/产品的需求和现状制定的,只是一些思路可以借鉴,具体的实施一定要结合实际情况,因地制宜的开展
  Jenkins持续发布流水线
  几个Jenkins持续发布流水线配置小Tips
  通过BuildNameSetterPlugin显示当次流水线构建的版本(SVN revision或是Git revision)
  通过ParameterizedTriggerPlugin自动触发下游任务,并把构建版本信息传递下去
  通过CopyArtifactPlugin用于构建物的部署
  通过BuildPipelinePlugin手工触发某些任务,用于需要人工介入的阶段

posted @ 2014-04-03 11:20 顺其自然EVO 阅读(1894) | 评论 (0)编辑 收藏

Jira6.0.5的详细安装及汉化授权

 第一步:安装jdk-6u24-windows-i586.exe
  (1)下载到oracle官网下装安装?? ?jdk-6u24-windows-i586.exe,http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u25-download-346242.html
  (2)配置JDK环境,在系统变量中创建JAVA_HOME ,值为C:\Program Files\Java\jdk1.6.0_24;
  创建Path,值为%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;
  创建Classpath,值为.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%lib/tools.jar;(注意,.为C:\Program Files\Java\jdk1.6.0_24的目录)
  说明:配置环境变量后,点击控制面板,cmd,Java -version,java,查看JDK环境是否能正常运行,如果可以,即JDK环境配置成功。
  第二步:安装mysql-5.5.20-win32.msi数据库
  (1)Mysql官网(http://dev.mysql.com/downloads/)下载安装mysql-5.5.20-win32.msi,安装过程中选择字符集为UTF8。(建议不要放在系统盘)
  注意,之前我安装的是mysql-6.0.7-alpha-win32版本,但 jdbc 链接总是有问题,后来就换了一个效早期的版本。
  (2)配置mysql环境变量 PATH:D:\Program Files\mysql-5.6.13-win32\bin
  (3)配置windows服务 mysqld -install
  (4)启动mysql  net start mysql      mysql -u root -p
  (5)建库和建立账户
  1  创建数据库jiradb
  create database jiradb character set 'UTF8';
  2 创建数据库用户并赋于权限
  create user jirauser identified by 'jira';//创建用户名为jirauser,密码为jira的帐号
  grant all privileges on *.* to 'jirauser’@ '%’ identified by 'jira’ with grant option;
  grant all privileges on *.* to 'jirauser’@ 'localhost’ identified by 'jira’ with grant option;
  flush privileges;
  第三步:下载jira
  (1)解压 toD:\Program Files\atlassian-jira-6.0.5\JIRA(可以在任意目录下)。
  (2)安装mysql驱动
  拷贝数据驱动mysql-connector-java-5.1.25-bin.jar到jira安装目录下的lib目录
  (3)在 D:\Program Files\atlassian-jira-6.0.5\JIRA\WEB-INF\classes\jira-application.properties, 设置 jira.home = D:\\Program Files\\atlassian-jira-6.0.5\\JIRA\atlassian-jira;。(注意,设置为主目录;另外,;可加可不加,加了;后,表示主目录为atlassian-jira;)
  第四步:汉化jira
  直接将language_zh_CN-6.0.jar拷贝到JIRA的安装目录的\atlassian-jira\WEB-INF\lib
  说明:JIRA提供了官方的中文包(汉化了60%),可通过web页面的插件管理安装官方的中文包。
  第五步:破解jira
  (1)用atlassian-extras-2.2.2.jar替换你的JIRA的安装目录的\atlassian-jira\WEB-INF\lib同名jar包。
  (2) 用atlassian-universal-plugin-manager-plugin-2.10.1.jar替换你的JIRA的安装目录的\atlassian-jira\atlassian-bundled-plugins.zip中的同名jar包。
  第六步,启动jira
  (1)进入D:\Program Files\atlassian-jira-6.0.5\JIRA\bin启动startup.bat,或者使用控制面板运行。
  (2)访问http://127.0.0.1:8080/进入到jira的首页。然后选中I have no a account,填写部分个人信息,然后注册成功后,即能试用访问jira。(注意:记得密码,访问时,需要输入密码。)
  (3)注册成功后,即可访问主页面。
  第七步,授权jira
  (1)进入主页面,找到管理-系统-授权,点击授权后,能查看到授权信息。
  (2)打开破解文件为keytpl.txt,修改相应信息,注意把SEN、ServerID、LicenseID等根据页面的授权信息复制到keytpl.txt文件下,然后修改后,把keytpl.txt的所有内容复制到授权码输入框中,点击添加,添加成功后,查看到用户限制为无限制,即表示授权成功。

posted @ 2014-04-03 11:17 顺其自然EVO 阅读(3100) | 评论 (1)编辑 收藏

LoadRunner对不同协议的选择

 大家常用的是Loadrunner测试web(Http/Html),但其实协议多种多样。在B/S结构的网站多种业务的特点需要选择不同的协议,协议如何选择呢,寻找了相关资料。
  LoadRunner首先是一个测试工具,其次是一个性能测试工具,然后是该工具是一个基于协议,也就是说LoadRunner测试的对象都需要使用通信协议,对于那些不使用通信协议仅仅进行本地处理的软件例如Microsoft Word,LoadRunner就不适用。说到通信协议我们来熟悉一下协议的分层,按照OSI的分层模型,分层结构如下:
  按照TCP/IP协议的分层,分层结构如下:
  第一个分层是由OSI制定但不实用,后一个是目前广泛使用且被业界认做既定标准的协议分层,下文探讨的LoadRunner协议选择即按TCP/IP协议的分层模型讨论。
  接着来说说LoadRunnerVuGen中的协议分类,VuGen(LR8.1)中的协议分类如下表所示:
  LoadRunner VuGen中的协议与文章开头所说的通信协议还是有一定的区别的,例如像LoadRunner VuGen中的C 模板、Visual Basic 模板、Java 模板、Javascript. 和 VBScript. 类型的脚本均为开发语言,非通信协议。
  一般来说协议选择有如下原则:
  B/S结构,选择WEB(Http/Html)协议;
  C/S结构,可以根据后端数据库的类型来选择,如SybaseCTLib协议用于测试后台的数据库为Sybase的应用;MSSQLServer协议用与测试后台数据库为SQL Server的应用;
  对于有些使用纯JAVA编写的C/S结构的东东,采用JAVA,而且不能录制只能手工编写代码(工作量和难度还是有的)。同样不能录制的还包括C、VB Script、VB、VBNet User协议。
  对于一些没有数据库的Windows应用,可选用Windows Sockets底层协议;使用了数据库但使用的是ODBC连接的数据则选择ODBC协议;对于Windows Sockets协议来说,最适合的那些基于Socket开发的应用程序;但是由于网络通讯的底层都是基于Socket的,因此几乎所有的应用程序都能够通过Socket来录制,哪可能有人会问,哪既然Socket都能录制下来,还要那么多协议做什么,价格还贼贵,其实最主要的原因就是Socket录制的代码可读性较差,如果Socket的脚本可读性较高的话,实话就没有其他协议出现的必要性了。
  对于邮件来说,首先要看你收邮件的途径,如果你通过WEB页面收发邮件,毫无疑问,你选择协议时就需要选择HTTP协议,如果你通过邮件客户端,像OutLook、FoxMail之类的,则需要根据操作不同选择不同的协议了,例如发邮件你可能要选择SMTP、收邮件你可能需要选择POP3。

posted @ 2014-04-03 11:17 顺其自然EVO 阅读(213) | 评论 (0)编辑 收藏

单元测试示例--LinkDaoTest.java

字体:        | 上一篇 下一篇 | 打印  | 我要投稿  | 推荐标签: 测试技术 单元测试

import java.sql.ResultSet;
import java.util.List;
import mockit.Mock;
import mockit.MockUp;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.geezn.exception.GeeznException;
import com.runqian.mis2.util.DBAccess;
import com.runqianapp.ngr.data.model.MyLink;
import com.runqianapp.schedule.utils.PathUtils;
/**
* @author RAQ
*
*/
public class LinkDaoTest {
private LinkDao linkDao = new LinkDao();
/**
* 配置文件项目路径
*/
public static final String setProjectPath = "E:/workplace_link/LinkManagerJava/WebRoot";
/**
* 初始化环境
*/
@BeforeClass
public static void init() throws Exception {
mockPathUtils();
}
/**
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
/**
* @throws java.lang.Exception
*/
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
/**
测试删除批量超链接方法
Test method for {@link com.runqianapp.ngr.link.dao.LinkDao#removeLinks(java.lang.String)}.
* @throws GeeznException
*/
@Test
public void testRemoveLinks() throws GeeznException {
StringBuffer links = new StringBuffer();
for(int i=21;i<1000;i++){
links.append("/link").append(i).append(",");
}
links.deleteCharAt(links.length()-1);
linkDao.removeLinks(links.toString());
for(int j=20;j<1000;j++){
MyLink linkCheck = linkDao.getMyLinkByShortLink("/link"+j);
assertEquals("判断删除超链接是否成功","",linkCheck.getShortLink());  //逐一验证超链接是否被成功删除
}
}
/**
* 测试删除单个超链接方法
* Test method for {@link com.runqianapp.ngr.link.dao.LinkDao#removeLink(java.lang.String)}.
* @throws Exception
*/
@Test
public void testRemoveLink() throws Exception {
JunitParamUtil junitUtil = new JunitParamUtil(System.getProperty("user.dir") + "/test/com/runqianapp/ngr/link/dao/removelinkparams",1);
// 从参数文件中获取到的参数List
List paramList = junitUtil.getParamList();
for (int i = 0; i < paramList.size(); i++) {
JunitParam param = (JunitParam) paramList.get(i);
linkDao.removeLinks(param.getString(0));
MyLink linkCheck = linkDao.getMyLinkByShortLink(param.getString(0));
assertEquals("判断删除超链接是否成功","",linkCheck.getShortLink());
}
}
/**
* 测试获取超链接方法
* Test method for {@link com.runqianapp.ngr.link.dao.LinkDao#getMyLinkByShortLink(java.lang.String)}.
* @throws Exception
*/
@Test
public void testGetMyLinkByShortLink() throws Exception {
JunitParamUtil junitUtil = new JunitParamUtil(System.getProperty("user.dir") + "/test/com/runqianapp/ngr/link/dao/getmylinkbyshortlinkparams",1);
// 从参数文件中获取到的参数List
List paramList = junitUtil.getParamList();
for (int i = 0; i < paramList.size(); i++) {
JunitParam param = (JunitParam) paramList.get(i);
MyLink linkCheck = linkDao.getMyLinkByShortLink(param.getString(0));
assertEquals("判断获取到的超链接是否为空",false,linkCheck.getLinkName().equals(""));
}
}
/**
* 测试修改超链接方法
* Test method for {@link com.runqianapp.ngr.link.dao.LinkDao#modifyMyLink(com.runqianapp.ngr.data.model.MyLink)}.
* @throws Exception
*/
@Test
public void testModifyMyLink() throws Exception {
JunitParamUtil junitUtil = new JunitParamUtil(System.getProperty("user.dir") + "/test/com/runqianapp/ngr/link/dao/modifylinkparams",6);
// 从参数文件中获取到的参数List
List paramList = junitUtil.getParamList();
for (int i = 0; i < paramList.size(); i++) {
MyLink myLink = new MyLink();
JunitParam param = (JunitParam) paramList.get(i);
// 获取并设置参数
myLink.setShortLink(param.getString(0));
myLink.setLinkName(param.getString(1));
myLink.setLinkUrl(param.getString(2));
myLink.setLinkDes(param.getString(3));
myLink.setIsRes(param.getInt(4));
myLink.setParams(param.getString(5));
linkDao.modifyMyLink(myLink);
String linkName = linkDao.getMyLinkByShortLink(param.getString(0)).getLinkName();
String linkUrl = linkDao.getMyLinkByShortLink(param.getString(0)).getLinkUrl();
String linkDes = linkDao.getMyLinkByShortLink(param.getString(0)).getLinkDes();
int linkIsRes = linkDao.getMyLinkByShortLink(param.getString(0)).getIsRes();
String linkParams = linkDao.getMyLinkByShortLink(param.getString(0)).getParams();
assertEquals("判断超链接名称是否已被修改",param.getString(1),linkName);
assertEquals("判断超链接Url是否已被修改",param.getString(2),linkUrl);
assertEquals("判断超链接描述是否已被修改",param.getString(3),linkDes);
assertEquals("判断超链接引用是否已被修改",param.getInt(4),linkIsRes);
assertEquals("判断超链接参数是否已被修改",param.getString(5),linkParams);
}
}
/**
* 测试新增超链接方法
* Test method for {@link com.runqianapp.ngr.link.dao.LinkDao#saveLink(com.runqianapp.ngr.data.model.MyLink)}.
* @throws Exception
*/
@Test
public void testSaveLink() throws Exception {
// Junit参数工具类
JunitParamUtil junitUtil = new JunitParamUtil(System.getProperty("user.dir") + "/test/com/runqianapp/ngr/link/dao/savelinkparams",6);
// 从参数文件中获取到的参数List
List paramList = junitUtil.getParamList();
for (int i = 0; i < paramList.size(); i++) {
MyLink myLink = new MyLink();
// Junit参数类
JunitParam param = (JunitParam) paramList.get(i);
// 获取并设置参数
myLink.setLinkName(param.getString(1));
myLink.setLinkUrl(param.getString(2));
myLink.setLinkDes(param.getString(3));
myLink.setIsRes(param.getInt(4));
myLink.setParams(param.getString(5));
//根据数据总条数来获得最后一个超链接ID,用于断言
DBAccess dba = new DBAccess();
String shortLink = "";
StringBuffer sql = new StringBuffer();
sql.append("select count(*) total from t_hyperlink");
ResultSet rs  = dba.executeQuery(sql.toString());
int total = 0;
while(rs.next()){
total = rs.getInt("total");
}
linkDao.saveLink(myLink);
MyLink checkLink = linkDao.getMyLinkByShortLink("/link"+total);
assertEquals("判断超链接名称",param.getString(1),checkLink.getLinkName());
assertEquals("判断超链接URL",param.getString(2),checkLink.getLinkUrl());
assertEquals("判断超链接描述",param.getString(3),checkLink.getLinkDes());
assertEquals("判断超链接是否引用",param.getInt(4),checkLink.getIsRes());
assertEquals("判断超链接参数",param.getString(5),checkLink.getParams());
}
//压力测试
//      for(int i = 20;i<1000;i++){
//          MyLink myLink = new MyLink();
//          myLink.setShortLink("/link100");
//          myLink.setLinkName("测试用例01");
//          myLink.setLinkUrl("http://www.runqian.com.cn");
//          myLink.setLinkDes("");
//          myLink.setIsRes(1);
//          try {
//              linkDao.saveLink(myLink);
//              MyLink checkLink = linkDao.getMyLinkByShortLink("/link20");
//              assertEquals("判断超链接名称","测试用例01",checkLink.getLinkName());
//          } catch (GeeznException e) {
//              // TODO Auto-generated catch block
//              e.printStackTrace();
//          }
//      }
}
/**
* 模拟PathUtils
*/
public  static void mockPathUtils() {
new MockUp<PathUtils>() {
@Mock
public String getAppPhyPath() {
return setProjectPath;
}
};
}
}

posted @ 2014-04-03 11:03 顺其自然EVO 阅读(282) | 评论 (0)编辑 收藏

谈谈容量规划

 容量规划是个资源管理的命题,其目标是解答运行中的系统需要多少容量以及在什么时候需要这些容量的问题,更简单的说法就是回答我们需要在什么时候加多少机器的问题。
  容量规划模型
  容量水位是一种常用的容量规划模型,其定义为:集群流量 / 集群性能 x 100%
  容量水位模型把容量规划问题转化为两个方面,即
  1. 系统的能力(集群性能)是多少?通过线上压测回答
  2. 系统的负荷(集群流量)是多少?通过线上监控回答
  通过预定义安全水位、加机器水位等水位线,当集群负荷达到特定水位线时采取相应的措施。
  线上压测
  集群性能 = 单机性能 x 集群机器数
  通过线上压测可以得到单机性能,进行线上压测前需要明确几个问题
  1. 用什么来描述系统的性能?TPS还是网络流量,根据具体业务具体分析,关键是它能真正反映实际性能
  2. 选取的性能指标能够方便地监控吗?
  3. 用什么样的标准来度量最大性能?比如CPU达到80%,响应时间超过1s
  线上监控
  根据选取的性能指标,监控当前系统的运行情况,记录其变化趋势
  依赖容量
  系统各个部分存在一定的依赖关系。从业务上理解,即最靠近用户的入口调用会转化为中间层和底层系统上的调用。
  一定的用户访问模式,能够得到其调用链路上的调用比例或依赖系数。故假设用户访问模式基本固定,我们只要设定(推广活动前)前端系统的容量目标,就能推算出其依赖的中间层和底层系统的容量目标,从而进行所有依赖系统的容量规划。
  容量规划是受到业务模式或访问模式影响的,而这种影响是一直变化的,我们需要定期的修正这种变化,才能保证容量规划结果的正确性。

posted @ 2014-04-03 10:57 顺其自然EVO 阅读(328) | 评论 (0)编辑 收藏

XP下安装Linux ubutu11.10双系统

  下面是在XP系统下,硬盘安装ubuntu11.10系统,安装双系统成功。
  1.menu.lst 和 grldr 放入C盘【以下【】中的内容,包括【】符号,到时候要删掉】
  在menu.lst末尾添加:
  title InstallUbuntu 11.10
  root (hd0,0)  【这个是boot的盘,是C盘】
  kernel (hd0,4)/vmlinuzboot=casper iso-scan/filename=/Ubuntu1110amd.iso ro quiet splashlocale=zh_CN.UTF-8 【这里5表示D,这是iso文件算在的盘,也可以是U盘】
  initrd (hd0,4)/initrd.lz   【这里4表示D盘】
  【以上要注意iso的文件名要和实际的iso文件名一样,位置也要一样】
  2.修改boot.ini【我的电脑è属性è高级è启动和故障恢复 设置è编辑 即是】
  在boot.ini末尾添加:
  c:\grldr="ubntu11.0"
  3.F盘格式化为FAT32格式,然后删掉【不知道没有格式化可否成功】
  4.将linux的iso相关文件放入(hd0,4)指定的盘中【4这里是D盘】
  【1】ISO文件放入D盘;
  【2】解压iso中casper文件夹中的initrd.lz和vmlinuz文件放到D盘中;
  【3】解压ISO中的isolinux文件夹到D盘中
  5.重启进入安装界面,在点击安装前,先进入终端执行下#sudo umount –l /isodevice
  6.选择linux和windows共存,进入安装
  7.安装好了,重启,可以看到ubuntu下linux自动安装好了启动选项;然后选择进入windows。进入windows后删掉前面的文件:
  进入C盘,删掉拷贝到C盘的menu.lst 和 grldr文件;
  并修改boot.ini文件:去掉添加的那一行 c:\grldr="ubntu11.0"
  下次进入XP系统时候,就不会在出现安装ubuntu11的选项了。

posted @ 2014-04-02 11:16 顺其自然EVO 阅读(197) | 评论 (0)编辑 收藏

Oracle数据库远程连接设置的四种方法及其注意事项

Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍。
  第一种情况:
  若oracle服务器装在本机上,那就不多说了,连接只是用户名和密码的问题了。不过要注意环境变量%ORACLE_HOME%/network/admin/是否设置。
  第二种情况:
  本机未安装oracle服务器,也未安装oracle客户端。但是安装了pl sql development、toad sql development、sql navigator等管理数据库的工具。在虚拟机或者另一台电脑上安装了oracle服务器,也就是虚拟机或者另一台电脑此时作为服务器。
  这种情况下,本人以pl sql development远程连接ORACLE服务端数据库为例:
  1、在安装oracle服务器的机器上搜索下列文件:
oci.dll
ocijdbc10.dll
ociw32.dll
orannzsbb10.dll
oraocci10.dll
oraociei10.dll
sqlnet.ora
tnsnames.ora
classes12.jar
ojdbc14.jar
  把这些找到的文件复制放到一个文件夹,如 oraclient,将此文件夹复制到客户端机器上。如放置路径为 D:\oraclient。
  2、配置tnsnames.ora,修改其中的数据库连接串。
oracledata =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.58)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = oracledata)
)
  其中,oracledata是要连接的服务名;HOST = 192.168.0.58,是服务器IP地址;PORT = 1521是端口号。
  3、添加第一个环境变量,名为TNS_ADMIN,值为tnsnames.ora文件所在路径(如:D:\oraclient,特别是重装后或其它操作,忘了TNS_ADMIN变量,plsql登陆就会报无法解析指定的连接标识符),这是为了能够找到上面说的tnsnames.ora。这步是最重要的。
  添加第二个环境变量(可有可无):“NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK”,(AMERICAN_AMERICA.US7ASCII 是ASCII编码类型,其它类型可自己到服务器看一下或网上查找一下)(本步骤暂时要做对,如果编码不对,会产生乱码)。
  4、下载并安装PL SQL Developer配置应用:
  打开PL SQL Developer,登入界面点取消,进入后选择菜单栏 tools->preferences->connection :
  Oracle Home=D:\oracleclient
  OCI library=D:\oracleclient\oci.dll
  5、再次打开plsql则会在database中有oracledata 选项输入用户名密码就可以登陆。
  第三种情况:
  本机未安装ORACLE服务器,但是安装了oracle客户端,也安装了pl sql development、toad sql development、sql navigator等管理数据库的工具。在虚拟机或者另一台电脑上安装了oracle服务器,也就是虚拟机或者另一台电脑此时作为服务器。
  这种情况下,本人以pl sql development远程连接oracle服务端数据库为例:
  1、打开oracle客户端中的net manager,配置要远程连接的数据库名、IP地址等,如果net manager中没有要远程连接的数据库名,则新建即可。
  2、其他步骤与第二种情况中的2---5相同。 第四种情况:
  本机未安装oracle服务器,也未安装pl sql development、toad sql development、sql navigator等管理数据库的工具,但是安装了oracle客户端。在虚拟机或者另一台电脑上安装了ORACLE服务器,也就是虚拟机或者另一台电脑此时作为服务器。
  这种情况下,本人以oracle客户端中的sqlplus远程连接oracle服务端数据库为例:
  1、打开oracle客户端中的net manager,配置要远程连接的数据库名、IP地址等,如果net manager中没有要远程连接的数据库名,则新建即可。
  2、同第二种情况中的步骤二。
  3、同第二种情况中的步骤三。
  4、打开sqlplus:
  (1)如果用sys用户登入,则用户名:sys 密码:xxxxxx 主机字符串:要连接的数据库名 as sysdba,登入即可。
  (2)如果用其他用户登入,则用户名:xxx 密码:xxxxxx 主机字符串:要连接的数据库名,登入即可。
  注意事项:
  1、服务器端和客户端防火墙需要关闭;
  2、我们经常会遇到监听器服务无法启动,那么需要打开Net Configuration Assistant修复,或者新建监听器服务。
  3、数据库密码如果忘了怎么办?按照以下方法修改密码即可:
  开始-->运行-->cmd
  输入 :sqlplus /nolog 回车
  输入 :connect / as sysdba 回车
  用户解锁 : alter user system account unlock 回车
  修改密码:alter user system identified by manager
  4、怎样判断数据库是运行在归档模式下还是运行在非归档模式下?
  进入dbastudio,历程--〉数据库---〉归档查看。
  5、另外,如果本机和别的机子均安装了oracle服务器端,那么本机如果要连接别的机子,就必须修改环境变量。

posted @ 2014-04-02 11:15 顺其自然EVO 阅读(287) | 评论 (0)编辑 收藏

仅列出标题
共394页: First 上一页 130 131 132 133 134 135 136 137 138 下一页 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜