2012年1月 的存档

window xp 下查看系统运行时间

2012年1月31日 没有评论

要想知道window xp系统从上次启动到现在共运行了多长时间,可以在命令行中使用命令:systeminfo,该命令的输出里面有一行“系统启动时间”就是指系统从开启到现在共运行的时间,另外可以通过 net statistics WORKSTATION 命令获取本次系统启动的时间。

浏览器出现下载提示框的配置

2012年1月31日 没有评论

当访问某个链接时浏览器是直接把内容显示出来还是出现下载提示框,这个跟当前页面的content-type有关,例如文本、html、css、图片等会直接显示出来,rar、zip等会出现下载提示框。如果需要把文本、图片不直接显示在浏览器中,可以通过人为设置其content-type。tomcat中配置如下:

    <mime-mapping>
        <extension>txt</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>jpg</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>

对于如上配置,当访问扩展名txt或jpg的资源时就出现下载提示框,如果只需要对某些提到的资源让其出现下载提示框,上述配置就不行了,解决的方法是在资源的response头中设置content-type即可,例如:

php 中
header("Content-type:application/octet-stream");
header('Content-Disposition: attachment; filename="downloaded.txt"');

java 中
response.setContentType("application/octet-stream");
resp.setHeader("Content-Disposition", "attachment;filename="downloaded.txt");

如果需要为下载设置一个保存的名字,可以用Content-Disposition属性来指定。

linux mysql客户端中执行系统命令

2012年1月17日 没有评论

在linux下可以用mysql命令登陆连接到mysql服务器,如果这时需要执行shell命令,例如查看某个目录下的文件列表,其实不需要退出mysql客户端,只需要在mysql提示符下输入system或\! 再加上系统命令即可。

分类: MySQL 标签:

memcached统计工具

2012年1月13日 没有评论

下载地址:memcached-tool ,用法命令:

perl memcached-tool server_ip:prot display 
perl memcached-tool server_ip:prot dump 
perl memcached-tool server_ip:prot stats  
perl memcached-tool server_ip:prot move 7 9

stats 输出说明:

pid					memcache服务器的进程ID
uptime					服务器已经运行的秒数
time					服务器当前的unix时间戳
version					memcache 版本
pointer_size				当前操作系统的指针大小(32位系统一般是32bit)
rusage_user				进 程的累计用户时间
rusage_system				进程的累计系统时间
curr_items				服务器当前存储的items数量
total_items				从服务器启动以后存储的items总数量
bytes					当前服务器存储items占用的字节数
curr_connections			当前打开着的连接数
total_connections			从服务器启动以后曾经打开过的连接数
connection_structures		        服务器分配的连接 构造数
cmd_get					get命令(获取)总请求次数
cmd_set					set 命令(保存)总请求次数
get_hits				总命中次数
get_misses				总未命中次数
evictions				为获取空闲内存而删除的items数
						(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
bytes_read				总读取字 节数(请求字节数)
bytes_written				总发送字节数(结果字节数)
limit_maxbytes				分配给memcache的内存大小(字节)
threads					当前线程数
分类: Linux 标签:

linux下设置Tomcat开启自动启动

2012年1月12日 没有评论

在centos下,开机后会自动执行/etc/rc.local中的命令,平时启动tomcat的命令为tomcat_home/bin/startup.sh或tomcat_home/bin/catalina.sh start,当直接把他们任何一个加入到/etc/rc.local中,重启机器后发现tomcat并没有启动。原因是开机时java的环境还没有设置好,故自己写一个脚本,先设置java环境,然后在启动,脚本如下:

export JAVA_HOME=/usr/local/jdk1.6.0_30
export PATH=$JAVA_HOME/bin/:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
export CATALINA_HOME=/usr/local/tomcat-6.0.35/

/usr/local/tomcat-6.0.35/bin/catalina.sh start

假设保存成一个名为auto-startup.sh的文件存放在/usr/local/tomcat-6.0.35/bin下,然后在/etc/rc.local加入/usr/local/tomcat-6.0.35/bin/auto-startup.sh即可。注意:需要设置auto-startup.sh有执行权限。

正确配置DBCP防止数据库重启引起的访问错误

2012年1月12日 没有评论

在java web 应用中使用dbcp做为连接池,当数据库重启或数据库连接超过设置的最大timemout时间,数据库会强行断开已有的链接,此时当web程序访问数据库时就会出现错误,大致的错误信息java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost,原因是数据库这边已有的连接强行断开,而连接池中不知道已经断开,还是从连接池取出数据库连接交给程序去执行数据库操作,所以导致出错。

mysql的默认最大timeout时间是8小时,对空闲超过8小时的数据库连接会强行断开。timeout有两种,一个是非交互式的最大等待时间wait_timeout,另一个是交互式的最大等待时间interactive_time,交互连接如mysql gui tool中的连接。一般情况下interactive_timeout的设置将要对你的web 应用没有多大的影响。wait_timeout的时间设置太小话会导致连接关闭很快,从而使一些持久连接不起作用,反之设置过大,容易造成连接打开时间过长,在show processlist时,能看到太多的sleep状态的连接,从而造成too many connections错误。修改wait_timeout可以在my.cnf的mysqld段中设置。

可以通过dbcp的配置来解决上述的报错。可以用两种方式。

方式一:通过设置validationQuery,例如:

	<property name="validationQuery">
		<value>select 1</value>
	</property>

使用上述配置,连接池在返回数据库连接给申请者时会多执行一条sql语句来确保该连接的有效性。如果数据库方已经关闭了,连接池会重新建立连接并返回给申请者。通过测试似乎跟testWhileIdle没有关系,不管其是true或false都正常工作。

方式二:通过配置timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis,例如:

	<property name="minEvictableIdleTimeMillis">
		<value>60000</value>
	</property>
	<property name="timeBetweenEvictionRunsMillis">
		<value>10000</value>
	</property>

在构造GenericObjectPool [BasicDataSource在其createDataSource () 方法中也会使用GenericObjectPool]时,会生成一个内嵌类Evictor,实现自Runnable接口。如果timeBetweenEvictionRunsMillis大于0,每过 timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()方法,检查连接池中的连接的闲置时间是否大于 minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0时则忽略,默认为30分钟),是则销毁此对象,然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle。如果连接池的连接数小于最小空闲连接数,则创建数据库连接,同时检查连接池的连接是否小于maxIdle,是则把刚创建的连接放入连接池中,否则销毁此对象。

上述方式一能确保不出现本文开头提到的错误,但是不好的方面是每次执行sql时都会额外执行一条提供的validationQuery sql;第二种方式在数据库重启后minEvictableIdleTimeMillis毫秒前访问web应用,连接数据库使用的还是连接池中老的连接,所以还会出现上述的错误,timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis也不宜设置过小,会加重系统开销。根据具体情况来考虑使用哪种方式。对于数据库可能会经常重启,web应用和数据库机器的网络连接不稳定,可以采取第一种方式,否则使用第二种。由于mysql的默认最大空闲时间8小时,所以只要把minEvictableIdleTimeMillis设置小于此值即可。例如配置每十分钟检查超过空闲一个小时的连接

	<property name="minEvictableIdleTimeMillis">
		<value>3600000</value>
	</property>
	<property name="timeBetweenEvictionRunsMillis">
		<value>600000</value>
	</property>
分类: Java 标签:

查看mysql数据库中某个库的存储过程

2012年1月11日 没有评论

如果只想知道存储过程的名字,有两种方法

  • 方法一:
select `name` from mysql.proc where db = '数据库名' and `type` = 'PROCEDURE';
  • 方法二:
use 数据库名

show procedure status;

查看存储过程的代码

use 数据库名

show create procedure proc_name;
分类: MySQL 标签: ,

绑定window的onload事件不执行

2012年1月10日 没有评论

今天碰到一个奇怪的问题,在一个外部的js文件中给页面绑定了onload事件,在FF下能正确执行,IE6下却没有执行。最开始以为是绑定事件写的有问题,后来排除,经过多方调试,依然没有找到问题所在。最后还是香烟给我灵感,突然想到会不会是页面是不是已经页面load完了才执行绑定onload的事件?赶紧用测试一把,把window的onload换成document.body的click,点击页面后成功执行了。基本可以肯定是页面load完了才进行绑定操作的。由于是在页面加载的js中用动态加载的方式加载了另外一个js,在另外一个js中执行的绑定事件,也就是说这样操作在ie6下可能会造成问题。现在知道问题所在,那解决问题办法就是先用document.readyState(complete表示加载完成)查看页面是否已经load完成,如果已经完成就可以直接执行,否则就绑定onload事件。

兼容主流的浏览量的绑定事件通用方法,

function addEvent(obj, event, callback) {
	if (obj.addEventListener) {
		obj.addEventListener(event, callback, false);
	} else {
		obj.attachEvent("on" + event, callback);
	}
}
当然也可以用document.readyState来达到onload的效果,示例如下:
(function(){
	if (document.readyState && document.readyState == 'complete') {
		// doing
	} else {
		setTimeout(arguments.callee, 10);
	}
})();

			

关于nginx rewrtie的四种flag

2012年1月9日 没有评论

利用nginx的rewrite的指令,可以实现url的转向,对于rewrtie有四种不同的flag,分别是redirect、permanent、break和last。其中前两种是跳转型的flag,后两种是代理型。跳转型是指有客户端浏览器重新对新地址进行请求,代理型是在WEB服务器内部实现跳转的。

  • redirect:302跳转到rewrtie后面的地址。
  • permanent:301永久调整到rewrtie后面的地址,即当前地址已经永久迁移到新地址,一般是为了对搜索引擎友好。
  • last:将rewrite后的地址重新在server标签执行。
  • break:将rewrite后地址重新在当前的location标签执行。

使用root或proxy_pass指定源,last,break都可以,但是结果可能会有差别,后面用例子说明;使用alias指定源,必须使用last。假如有如下配置:

	location / {
	    root   /var/www/html;
	    index  index.html index.htm;
	    rewrite "/x/t.html" /y/t.html break;
	}

	location /y/ {
	    root  /var/www/html/other;
	}

当请求/x/t.html,符合rewrite规则,所以进行调整,调整的地址为/y/t.html,由于使用的flag是break,所以在“location /”中进行跳转,结果是/var/www/html/y/t.html。但如果flag为last,那么/y/t.html将在server标签中重新执行,由于存在一个“location /y/”,所以跳转被重新指定到“location /y/”标签,所以这个时候的结果为/var/www/html/other/y/t.html。

注意:使用last,如果配置不当,可能引起死循环。例如:

	location /x/ {
	    proxy_pass http://my_proxy;
	    rewrite "^/x/(.*)\.html$" /x/1.html last;
	}
分类: Linux, nginx 标签: , ,

使用jquery出现is not a function

2012年1月5日 1 条评论

最近在使用jquery时候,通过firefox的错误控制看到$(function(){//mycode}) is not a function的错误提示,但是mycode代码块都成功执行了,页面的没有出现别的异常,不过看到这个错误提示还是不爽,如是觉得找到原因,网上一搜,发现有这个问题的还不少,最多的是由于jquery和别的框架冲突,例如prototype,还有的说是由于两次导入了jquery,我在我的项目中仔细的查看,不存在刚提到的两种情况,一度以为是由于文件的编码问题造成,试着用不同的文本工具来定义js文件,问题还是依旧,经过不断的各种方法尝试,终于知道问题出在什么地方,是因为在后面加了一对括号引起的。

$(function(){
	//my code
	// ...
})();

注意最后的一对括号。可能是因为最近使用闭包情况比较多,写的时候随手写上了,害我一顿好找。

无觅相关文章插件,快速提升流量