新上线了一个接口,但是导致整个服务越来越慢。之前所做的压力测试结果也不错,五百并发只要十几秒。因为没有做疲劳测试,当前看来还是有问题。但是具体哪里出了问题还不清楚,需要详细查看。我也不是java开发所以只能是协助分析,先找了个分析工具看看导致瓶颈的主要原因。下载http://java.net/projects/visualvm/downloads/download/release134/visualvm_134.zip,解压缩后直接使用。
解压缩后在文件夹的bin目录下有两个可执行文件,一个是exe的windows下使用的,另一个是linux下使用的。直接将解压的目录上传到linux操作系统中。准备运行,需要注意的是,linux下运行需要用到图形化,所以要用putty这类的小工具需要开启X11。
启动# sh visualvm。在左侧可以看到已经启动的容器,打开resin服务。等待运行一段时间如图:
经过更长时间对比,确定应该是内存泄露问题。因为内存值不断在增长,直至将系统资源占满。正常的接口,进行压力测试时,内存和CPU的值均比较平衡。具体问题使用sampler进行分析,应该是字符转换存在问题,并且没有释放。我直接反馈给开发人员,具体问题就不清楚了,在此做个简单记录。
Category Archives: 技术杂类
云技术和物联网之我见
云技术和物联网是当下炒的比较热门的两个技术,我也随波逐流进行了肤浅的学习。本来没有打算写什么,但是在实际中遇到很多人对技术的认识我和我的认知差距很大,所以我觉得有必要通过写字,来记录一下当前的想法,以便后期反省使用。
首先看看什么是云,云到现在也没有很明确的定义,我把当前所见过对云的定义总结一下。就是大规模计算机集群,用户可以根据自己需要资源量来进行定制化使用。随之而来的问题是,google、百度、亚马逊、雅虎等在很多年前都已部署了集群,为什么没有提出云概念?电信公司使用大规模计算机进行服务,我们按照需要进行使用付费,为什么通信行业没有提出云的概念?我的答案,电信行业的收费模式已经形成,并且被公认。而以互联网为基础的大型公司有剩余的网络、设备和技术资源,可以简单的包装,便能为当前需要但又不是长期需要的客户进行服,这种服务需要的是技术的噱头和简单的盈利方案,云产生了。云的技术已经在大型公司相当完善,所以云应该和传统的叫法结合。云技术是整体名称,细分可以分为云计算、云存储、云流量、云安全等等。云计算,是以cpu为计费主体的方案。云存储是以存储为主体的方案,当然存储是分布式存储,也必须用到计算的部分,但计算起到的作用是为存储选址的作用。举个实际的例子,cpu就是车间,cpu产出信息,车间产出物品,cpu产出存在磁盘,车间产出存在仓库。可以通过车间产出运输可以找到物品的存放仓库,但是仓库可以转给这个车间用,也可以是其它的仓库。车间和仓库都属于一个厂,但是仓库绝对不是车间下层的一部分。如果还要具体讨论,还需要了解,什么叫数据,什么叫信息、什么叫计算这些基础知识就不废话了,有空查查看。如果大家很熟悉分布式那云基本就没有问题了,我对云的热情也减少了不少。
再来说物联网。物联网的定义很清晰,通过射频识别(RFID)、感应器、全球定位系统、控制器、短距离通信技术,按约定的协议,把任何物品与互联网相连接,从而达到人与物,物与物之间的连接。物联网的传出是以所有的通信网络为基础,是信息交换和通信的一种网络概念。当前的ETC通道、移动医疗、远程视频等都属于物联网的范畴。物联网正在高速的发展,中国也在大力的打造物联网,所以物联网应该是发展的趋势。在此就不费唇舌了。
resin 展示静态页面中文乱码
编辑了一个html,页面编码使用utf-8,保存也使用utf-8,本地直接用浏览器测试正常。但是上传到centos下resin-pro-4.0.6的中文就乱码了。将页面放到centos下的nginx中,中文显示正常。所以确定是resin展示的问题。
修改resin配置 conf/app-default.xml
原始配置如下:
false 1024 true
增加配置
utf-8
,修改结果如下:
utf-8 false 1024
重启resin服务,浏览html正常。
注:清除浏览器的页面缓存后测试
猴子们的问题
【2012 张子萌】
其实此问题比较容易,在网上也有很多版本。为了学习我自己做了一下,在CeotOS5.4系统编译调试通过。
猴子分桃子:有5只猴子在海边发现一堆桃子,决定第二天来平分.第二天清晨,第一只猴子最早来到,它左分右分分不开,就朝海里扔了一只,恰好可以分成5份,它拿上自己的一份走了.第2,3,4,5只猴子也遇到同样的问题,采用了同样的方法,都是扔掉一只后,恰好可以分成5份.问这堆桃子至少有多少只.
#include
main ()
{
int monkeys,peach=0,all_peach;
do
{
peach=peach+1;
all_peach=peach;
for (monkeys=5;monkeys>0;monkeys–)
{
all_peach=all_peach*5+1;
}
}while (((all_peach-1)/2)==0);
printf(“==>%dn”,all_peach);
}
结果如下:
# ./test
==>3906
猴子吃桃子:猴子第一天摘下N个桃子,当时就吃了总数的一半,还不过瘾,
就又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。
以后每天都吃前一天剩下的一半零一个。
到第9天在想吃的时候就剩一个桃子了,求第一天共摘下来多少个桃子?
#include
main ()
{
int days,peach=1;
for(days=9;days>0;days–)
{
peach=(peach+1)*2;
}
printf(“==>%d”,peach);
}
结果如下:
# ./test
==>1534
猴子选大王:n只猴子围坐成一个圈,按顺时针方向从1到n编号。
然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,
再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,
它就是大王。
#include
main ()
{
int monkeys,num;
int loops,kings;
int i,j=-1;
printf(“pleas input monkey amonut:”);
scanf(“%d”,&monkeys);
printf(“pleas input num:”);
scanf(“%d”,&num);
int m_k[num];
for (i=0;i
m_k[i]=1;
}
kings=monkeys;
//start choose king
do
{
loops=num;
while(loops>0)
{
j=j+1;
if (j>monkeys-1) j=0;
if (m_k[j]==1)
loops=loops-1;
}
m_k[j]=0;
kings=kings-1;
}while(kings>1);
for (i=0;i
printf(“%d “,m_k[i]);
}
}
结果如下:
# ./test
pleas input monkey amonut:6
pleas input num:2
0 0 0 0 1 0
php python node.js 简单循环累加计算速度测试
【张子萌 www.simonzhang.net 2012-4-1】
之前简单做了一下node.js和python的“hello ***”的页面测试,也做了循环的测试,本次主要是增加了java的语言,go语言。主要是想看一下主流四种脚本的速度java、python、php、c语言。均使用for循环进行简单的累加测试。个人技能有限所以只做了简单测试做参考。
实验环境使用linux 64位服务器,操作系统为contos 5.4,php版本5.1.6,python版本为2.6.6,node.js版本为0.4.12,java版本为1.6.0_03,gcc 版本 4.1.2 2008070,go语言为1.0.2。
一、脚本编写
php脚本
# cat test.php
$m=0; for (;$i<10000000;$i++){ $m=$m+$i; } echo $m; ?>
python脚本
# cat test.py
#!/bin/env python #-*- coding:utf-8 -*- def main(): j = 0; for i in xrange(10000000): j=j+i print j if __name__=="__main__": main()
node.js脚本
# cat test.js
var j=0; for (i = 0; i < 10000000; i++ ) { j=j+i } console.log(j);
Java代码:
# cat Test.java
public class Test { public static void main(String[] args) { long n = 0; for (int i = 0; i < 10000; i++) { n=n+i; } System.out.println(n); } }
C语言,使用gcc编译,编译两种结果,一种是直接编译的,一种是优化编译的。
#include#include main() { long i,j=0; for (i=0 ; i<10000000 ; i++) j=j+i; printf("%ld\n",j); }
go语言代码
package main import "fmt" func main() { var sum,i int64 sum=0 for i=0;i<10000000;i++{ sum+=i } fmt.Printf("%d",sum) }
二、运行结果
使用time命令对程序运行时间进行统计
以下是循环一千万次的累加测试结果。
参数 | C语言直接编译 | C语言优化编译 | go | Node.js | Python | PHP | Java |
Real | 0.024s | 0.001s | 0.011s | 0.420s | 1.055s | 1.429s | 0.087 |
User | 0.023s | 0.000s | 0.011s | 0.401s | 1.046s | 1.423s | 0.067 |
sys | 0.001s | 0.001s | 0.000s | 0.019s | 0.009s | 0.007s | 0.015 |
以下是循环一万次的累加测试结果
参数 | C语言直接编译 | C语言优化编译 | go | Node.js | Python | PHP | Java |
Real | 0.001s | 0.001s | 0.004s | 0.090s | 0.027s | 0.014s | 0.087 |
User | 0.000s | 0.001s | 0.003s | 0.080s | 0.022s | 0.007s | 0.041 |
sys | 0.001s | 0.000s | 0.002s | 0.010s | 0.006s | 0.007s | 0.017 |
三、结论
从简单的测试来看,c语言不是一般的快,大数据计算情况下node.js速度最快,java次之,python和php比慢。但是如果是少量计算时php效果还是很不错。但是实际应用中,还需要调用各种函数和各方面的资源,并不能以一个空框架下的for来判断。每种语言都会有自己擅长的一方面,速度快与慢,还与编写的技巧性有关。学好每一步,认认真真踏实的做就好了。