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
	// ...
})();

注意最后的一對括號。可能是因為最近使用閉包情況比較多,寫的時候隨手寫上了,害我一頓好找。

無覓相關文章插件,快速提升流量

30选5怎么中奖