久久99久久99精品中文字幕 ,久久精品国产99国产精品,625成人欧美午夜电影http://www.aygfsteel.com/gf7/<a ><img src="https://www.juziplus.org/public/uploads/images/2013/09/20130913101833161.gif" alt="" /></a>zh-cnSat, 17 May 2025 17:17:40 GMTSat, 17 May 2025 17:17:40 GMT60apache修改最大連接并用ab網(wǎng)站壓力測(cè)試http://www.aygfsteel.com/gf7/archive/2012/12/20/393255.html風(fēng)風(fēng)Thu, 20 Dec 2012 06:51:00 GMThttp://www.aygfsteel.com/gf7/archive/2012/12/20/393255.htmlhttp://www.aygfsteel.com/gf7/comments/393255.htmlhttp://www.aygfsteel.com/gf7/archive/2012/12/20/393255.html#Feedback0http://www.aygfsteel.com/gf7/comments/commentRss/393255.htmlhttp://www.aygfsteel.com/gf7/services/trackbacks/393255.htmlapache修改最大連接并用ab網(wǎng)站壓力測(cè)試


apache 2.2,使用默認(rèn)配置,默認(rèn)最大連接數(shù)是150


1.首先在httpd.conf中加載httpd-mpm.conf配置(去掉前面的注釋):
# Server-pool management (MPM
specific)
Include conf/extra/httpd-mpm.conf


2.可見的MPM配置在/usr/local/apache/conf/extra/httpd-mpm.conf,但里面根據(jù)httpd的工作模式分了很多塊,哪一部才是當(dāng)前httpd的工作模式呢?可通過執(zhí)行
apachectl -l 來查看:
[root@zh888 extra]# /usr/local/apache/bin/apachectl
-l//因?yàn)椴捎渺o態(tài)編譯
Compiled in
modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_cache.c
mod_disk_cache.c
mod_mem_cache.c
mod_include.c
mod_filter.c
mod_deflate.c
mod_log_config.c
mod_env.c
mod_expires.c
mod_headers.c
mod_setenvif.c
mod_version.c
mod_proxy.c
mod_proxy_connect.c
mod_proxy_ftp.c
mod_proxy_http.c
mod_proxy_scgi.c
mod_proxy_ajp.c
mod_proxy_balancer.c
prefork.c//才用prefork所以在httpd-mpm.conf中找到mpm_prefork_module
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgi.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_rewrite.c
mod_so.c


所以修改連接數(shù)就在/usr/local/apache/conf/extra/httpd-mpm.conf這個(gè)文件了,打開它就找到prefork模式的默認(rèn)配置是:

StartServers
5
MinSpareServers 5
MaxSpareServers 10
MaxClients
150
MaxRequestsPerChild 0


prefork
控制進(jìn)程在最初建立“StartServers”個(gè)子進(jìn)程后,為了滿足MinSpareServers設(shè)置的需要?jiǎng)?chuàng)建一個(gè)進(jìn)程,等待一秒鐘,繼續(xù)創(chuàng)建兩個(gè),再等待一秒鐘,繼續(xù)創(chuàng)建四個(gè)……如此按指數(shù)級(jí)增加創(chuàng)建的進(jìn)程數(shù),最多達(dá)到每秒32個(gè),直到滿足MinSpareServers設(shè)置的值為止。


這種模式可以不必在請(qǐng)求到來時(shí)再產(chǎn)生新的進(jìn)程,從而減小了系統(tǒng)開銷以增加性能。MaxSpareServers設(shè)置了最大的空閑進(jìn)程數(shù),如果空閑進(jìn)程數(shù)大于這個(gè)值,Apache會(huì)自動(dòng)kill掉一些多余進(jìn)程。這個(gè)值不要設(shè)得過大,但如果設(shè)的值比MinSpareServers小,Apache會(huì)自動(dòng)把其調(diào)整為
MinSpareServers+1。如果站點(diǎn)負(fù)載較大,可考慮同時(shí)加大MinSpareServers和MaxSpareServers。


MaxRequestsPerChild設(shè)置的是每個(gè)子進(jìn)程可處理的請(qǐng)求數(shù)。每個(gè)子進(jìn)程在處理了“MaxRequestsPerChild”個(gè)請(qǐng)求后將自動(dòng)銷毀。0意味著無限,即子進(jìn)程永不銷毀。
雖然缺省設(shè)為0可以使每個(gè)子進(jìn)程處理更多的請(qǐng)求,但如果設(shè)成非零值也有兩點(diǎn)重要的好處:
1、可防止意外的內(nèi)存泄漏。
2、在服務(wù)器負(fù)載下降的時(shí)侯會(huì)自動(dòng)減少子進(jìn)程數(shù)。因此,可根據(jù)服務(wù)器負(fù)載來調(diào)整這個(gè)值。MaxClients是這些指令中最為重要的一個(gè),設(shè)定的是
Apache可以同時(shí)處理的請(qǐng)求,是對(duì)Apache性能影響最大的參數(shù)。其缺省值150是遠(yuǎn)遠(yuǎn)不夠的,如果請(qǐng)求總數(shù)已達(dá)到這個(gè)值(可通過ps -ef|grep
httpd|wc
-l來確認(rèn)),那么后面的請(qǐng)求就要排隊(duì),直到某個(gè)已處理請(qǐng)求完畢。這就是系統(tǒng)資源還剩下很多而HTTP訪問卻很慢的主要原因。雖然理論上這個(gè)值越大,可以處理的請(qǐng)求就越多,但Apache默認(rèn)的限制不能大于256。ServerLimit指令無須重編譯Apache就可以加大MaxClients。


注意,雖然通過設(shè)置ServerLimit,我們可以把MaxClients加得很大,但是往往會(huì)適得其反,系統(tǒng)耗光所有內(nèi)存。以我手頭的一臺(tái)服務(wù)器為例:內(nèi)存2G,每個(gè)apache進(jìn)程消耗大約0.5%(可通過ps
aux來確認(rèn))的內(nèi)存,也就是10M,這樣,理論上這臺(tái)服務(wù)器最多跑200個(gè)apache進(jìn)程就會(huì)耗光系統(tǒng)所有內(nèi)存,所以,設(shè)置MaxClients要慎重。



3.要加到多少?


連接數(shù)理論上當(dāng)然是支持越大越好,但要在服務(wù)器能力范圍內(nèi),這跟服務(wù)器CPU、內(nèi)存、帶寬等都有關(guān)系。


查看當(dāng)前的連接數(shù)可以用:
ps aux | grep httpd | wc -l
計(jì)算httpd占用內(nèi)存的平均數(shù):
ps
aux|grep -v grep|awk '/httpd/{sum+=$6;n++};'


由于基本都是靜態(tài)頁面,CPU消耗很低,每進(jìn)程占用內(nèi)存也不算多,大約200K。


假如服務(wù)器內(nèi)存有2G,除去常規(guī)啟動(dòng)的服務(wù)大約需要500M(保守估計(jì)),還剩1.5G可用,那么理論上可以支持1.5*1024*1024*1024/
= 8053.


約8K個(gè)進(jìn)程,支持2W人同時(shí)訪問應(yīng)該是沒有問題的(能保證其中8K的人訪問很快,其他的可能需要等待1、2秒才能連上,而一旦連上就會(huì)很流暢)


控制最大連接數(shù)的MaxClients ,因此可以嘗試配置為:

StartServers 5
MinSpareServers
5
MaxSpareServers 10
ServerLimit 5500
MaxClients
5000
MaxRequestsPerChild 100


注意,MaxClients默認(rèn)最大為250,若要超過這個(gè)值就要顯式設(shè)置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重啟httpd時(shí)會(huì)有提示。


重啟httpd后,通過反復(fù)執(zhí)行pgrep httpd|wc -l
來觀察連接數(shù),可以看到連接數(shù)在達(dá)到MaxClients的設(shè)值后不再增加,但此時(shí)訪問網(wǎng)站也很流暢,那就不用貪心再設(shè)置更高的值了,不然以后如果網(wǎng)站訪問突增不小心就會(huì)耗光服務(wù)器內(nèi)存,可根據(jù)以后訪問壓力趨勢(shì)及內(nèi)存的占用變化再逐漸調(diào)整,直到找到一個(gè)最優(yōu)的設(shè)置值。


(MaxRequestsPerChild不能設(shè)置為0,可能會(huì)因內(nèi)存泄露導(dǎo)致服務(wù)器崩潰)


更佳最大值計(jì)算的公式:


apache_max_process_with_good_perfermance < (total_hardware_memory /
apache_memory_per_process ) * 2
apache_max_process =
apache_max_process_with_good_perfermance * 1.5


4.用/usr/local/apache/bin/ab來測(cè)試壓力不過還有一個(gè)工具叫webbench也可以測(cè)試。


[root@zh888 bin]# /usr/local/apache/bin/ab -n 100 -c
100http://192.168.100.1:8000/index.php//參數(shù)很多一般我們用 -c 和 -n
參數(shù)就可以了這個(gè)表示同時(shí)處理100個(gè)請(qǐng)求并運(yùn)行100次index.php文件.


This is ApacheBench Version 2.3
Copyright 1996 Adam Twiss Zeus Technology
Ltd
Licensed to The Apache Software Foundation


Benchmarking 192.168.100.1 (be patient).....done



Server Software: Apache/2.2.19//平臺(tái)apache 版本2.0.54


Server Hostname: 192.168.100.1//服務(wù)器主機(jī)名


Server Port: 8000//端口


Document Path: /index.php//測(cè)試的頁面文檔


Document Length: bytes//文檔大小



Concurrency Level: 100//并發(fā)數(shù)


Time taken for tests: 4.482 seconds//整個(gè)測(cè)試持續(xù)的時(shí)間


Complete requests: 100//完成的請(qǐng)求數(shù)量


Failed requests: 0//失敗的請(qǐng)求數(shù)量


Write errors: 0
Total transferred: bytes//整個(gè)場(chǎng)景中的網(wǎng)絡(luò)傳輸量


HTML transferred: bytes
Requests per second: 22.31 [#/sec]
(mean)//大家最關(guān)心的指標(biāo)之一,相當(dāng)于 LR 中的 每秒事務(wù)數(shù) ,后面括號(hào)中的 mean 表示這是一個(gè)平均值


Time per request: 4481.929 [ms] (mean)//大家最關(guān)心的指標(biāo)之二,相當(dāng)于 LR 中的 平均事務(wù)響應(yīng)時(shí)間 ,后面括號(hào)中的
mean 表示這是一個(gè)平均值
Time per request: 44.819 [ms] (mean across all concurrent
requests)//每個(gè)請(qǐng)求實(shí)際運(yùn)行時(shí)間的平均值


Transfer rate: 793.68 [Kbytes/sec]
received//平均每秒網(wǎng)絡(luò)上的流量,可以幫助排除是否存在網(wǎng)絡(luò)流量過大導(dǎo)致響應(yīng)時(shí)間延長的問題



Connection Times (ms)//網(wǎng)絡(luò)上消耗的時(shí)間的分解。


min mean[+/-sd] median max
Connect: 0 73 24.5 79 96
Processing: 252
2542 1291.7 2590 4386
Waiting: 252 2541 1292.5 2590 4384
Total: 253 2615
1311.0 2671 4482


Percentage of the requests served within a certain time
(ms)//整個(gè)場(chǎng)景中所有請(qǐng)求的響應(yīng)情況。在場(chǎng)景中每個(gè)請(qǐng)求都有一個(gè)響應(yīng)時(shí)間,其中50%的用戶響應(yīng)時(shí)間小于1093 毫秒,60% 的用戶響應(yīng)時(shí)間小于1247
毫秒,最大的響應(yīng)時(shí)間小于7785
毫秒
由于對(duì)于并發(fā)請(qǐng)求,cpu實(shí)際上并不是同時(shí)處理的,而是按照每個(gè)請(qǐng)求獲得的時(shí)間片逐個(gè)輪轉(zhuǎn)處理的,所以基本上第一個(gè)Time per
request時(shí)間約等于第二個(gè)Time per request時(shí)間乘以并發(fā)請(qǐng)求數(shù)



50% 2671
66% 3351
75% 3923
80% 4095
90% 4358
95%
4441
98% 4472
99% 4482
100% 4482 (longest request)



4.是在使用Apache2.2的ab進(jìn)行測(cè)試時(shí)遇到的問題:
使用ab測(cè)試的時(shí)候當(dāng)-c并發(fā)數(shù)超過1024就會(huì)出錯(cuò):
windows下提示:apr_pollset_create
failed: Invalid argument (22)
linux下提示:socket: Too
many open files (24)
解決辦法:
linux下:ulimit -n
(設(shè)置系統(tǒng)允許同時(shí)打開的文件數(shù),系統(tǒng)默認(rèn)是1024),可以用ulimit -a查看open files項(xiàng),# lsof |wc -l
可以查看系統(tǒng)所有進(jìn)程的文件打開數(shù)。


ulimit:顯示(或設(shè)置)用戶可以使用的資源限制
ulimit -a 顯示用戶可以使用的資源限制
ulimit unlimited
不限制用戶可以使用的資源,但本設(shè)置對(duì)可打開的最大文件數(shù)(max open files)
和可同時(shí)運(yùn)行的最大進(jìn)程數(shù)(max user
processes)無效
ulimit -n 設(shè)置用戶可以同時(shí)打開的最大文件數(shù)(max open files)
例如:ulimit -n 8192

如果本參數(shù)設(shè)置過小,對(duì)于并發(fā)訪問量大的網(wǎng)站,可能會(huì)出現(xiàn)too many open files的錯(cuò)誤
ulimit -u
設(shè)置用戶可以同時(shí)運(yùn)行的最大進(jìn)程數(shù)(max user processes)
例如:ulimit -u 1024


5最后補(bǔ)充一下apache的知識(shí):
簡(jiǎn)介



Apache
HTTP服務(wù)器被設(shè)計(jì)為一個(gè)強(qiáng)大的、靈活的能夠在多種平臺(tái)以及不同環(huán)境下工作服務(wù)器。不同的平臺(tái)和不同的環(huán)境經(jīng)常產(chǎn)生不同的需求,或是為了達(dá)到同樣的最佳效果而采用不同的方法。Apache憑借它的模塊化設(shè)計(jì)很好的適應(yīng)了大量不同的環(huán)境。這一設(shè)計(jì)使得網(wǎng)站管理員能夠在編譯時(shí)和運(yùn)行時(shí)憑借載入不同的模塊來決定服務(wù)器不同附加功能。


Apache2.0將這種模塊化的設(shè)計(jì)延伸到了web服務(wù)器基礎(chǔ)功能上。這個(gè)版本帶有多路處理模塊(MPM)的選擇以處理網(wǎng)絡(luò)端口綁定、接受請(qǐng)求并指派鐘進(jìn)程來處理這些請(qǐng)求。


將模塊化設(shè)計(jì)延伸到這一層次主要有以下兩大好處:


*
Apache可以更簡(jiǎn)潔、更有效地支持各種操作系統(tǒng)。尤其是在mpm_winnt中使用本地網(wǎng)絡(luò)特性代替Apache1.3中使用的POSIX模擬層后,Windows版本的Apache現(xiàn)在具有更好的性能。這個(gè)優(yōu)勢(shì)借助特定的MPM同樣延伸到了其他各種操作系統(tǒng)。
*
服務(wù)器可以為某些特定的站點(diǎn)進(jìn)行定制。比如,需要更好伸縮性的站點(diǎn)可以選擇象worker或event這樣線程化的MPM,而需要更好的穩(wěn)定性和兼容性以適應(yīng)一些舊的軟件的站點(diǎn)可以用prefork


從用戶角度來看,MPM更像其他的Apache模塊。主要的不同在于:不論何時(shí),必須有且僅有一個(gè)MPM被載入到服務(wù)器中。現(xiàn)有的MPM列表可以在模塊索引中找到。


選擇一個(gè)MPM



MPM必須在編譯配置時(shí)進(jìn)行選擇,并靜態(tài)編譯到服務(wù)器中。如果編譯器能夠確定線程功能被啟用,它將會(huì)負(fù)責(zé)優(yōu)化大量功能。因?yàn)橐恍㎝PM在Unix上使用了線程,而另外一些沒有使用,所以如果在編譯配置時(shí)選擇MPM并靜態(tài)編譯進(jìn)Apache,Apache將會(huì)有更好的表現(xiàn)。


你可以在使用configure腳本時(shí)用 --with-mpm=NAME 選項(xiàng)指定MPM,NAME就是你想使用的MPM的名稱。


一旦服務(wù)器編譯完成,就可以用 ./httpd -l
命令來查看使用了哪個(gè)MPM。這個(gè)命令將列出所有已經(jīng)被編譯到服務(wù)器中的模塊,包括MPM。


我們主要闡述prefork和worker這兩種和性能關(guān)系最大的產(chǎn)品級(jí)MPM。



Apache MPM prefork
一個(gè)非線程型的、預(yù)派生的MPM



概述


這個(gè)多路處理模塊(MPM)實(shí)現(xiàn)了一個(gè)非線程型的、預(yù)派生的web服務(wù)器,它的工作方式類似于Apache
1.3。它適合于沒有線程安全庫,需要避免線程兼容性問題的系統(tǒng)。它是要求將每個(gè)請(qǐng)求相互獨(dú)立的情況下最好的MPM,這樣若一個(gè)請(qǐng)求出現(xiàn)問題就不會(huì)影響到其他請(qǐng)求。


這個(gè)MPM具有很強(qiáng)的自我調(diào)節(jié)能力,只需要很少的配置指令調(diào)整。最重要的是將MaxClients設(shè)置為一個(gè)足夠大的數(shù)值以處理潛在的請(qǐng)求高峰,同時(shí)又不能太大,以致需要使用的內(nèi)存超出物理內(nèi)存的大小。


工作方式


一個(gè)單獨(dú)的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)產(chǎn)生子進(jìn)程,這些子進(jìn)程用于監(jiān)聽請(qǐng)求并作出應(yīng)答。Apache總是試圖保持一些備用的(spare)或者是空閑的子進(jìn)程用于迎接即將到來的請(qǐng)求。這樣客戶端就不需要在得到服務(wù)前等候子進(jìn)程的產(chǎn)生。


StartServers MinSpareServers MaxSpareServers
MaxClients指令用于調(diào)節(jié)父進(jìn)程如何產(chǎn)生子進(jìn)程。通常情況下Apache具有很強(qiáng)的自我調(diào)節(jié)能力,所以一般的網(wǎng)站不需要調(diào)整這些指令的默認(rèn)值。可能需要處理最大超過256個(gè)并發(fā)請(qǐng)求服務(wù)器可能需要增加MaxClients的值。內(nèi)存比較小的機(jī)器則需要減少M(fèi)axClients的值以保證服務(wù)器不會(huì)崩潰。更多關(guān)于調(diào)整進(jìn)程產(chǎn)生的問題請(qǐng)參見性能方面的提示。


在Unix系統(tǒng)中,父進(jìn)程通常以root身份運(yùn)行以便邦定80端口,而Apache產(chǎn)生的子進(jìn)程通常以一個(gè)低特權(quán)的用戶運(yùn)行。User和Group指令用于設(shè)置子進(jìn)程的低特權(quán)用戶。運(yùn)行子進(jìn)程的用戶必須要對(duì)它所服務(wù)的內(nèi)容有讀取的權(quán)限,但是對(duì)服務(wù)內(nèi)容之外的其他資源必須擁有盡可能少的權(quán)限。


MaxRequestsPerChild指令控制服務(wù)器殺死舊進(jìn)程產(chǎn)生新進(jìn)程的頻率。


Apache MPM worker
支持混合的多線程多進(jìn)程的多路處理模塊


概述


此多路處理模塊(MPM)使網(wǎng)絡(luò)服務(wù)器支持混合的多線程多進(jìn)程。由于使用線程來處理請(qǐng)求,所以可以處理海量請(qǐng)求,而系統(tǒng)資源的開銷小于基于進(jìn)程的MPM。但是,它也使用了多進(jìn)程,每個(gè)進(jìn)程又有多個(gè)線程,以獲得基于進(jìn)程的MPM的穩(wěn)定性。


控制這個(gè)MPM的最重要的指令是,控制每個(gè)子進(jìn)程允許建立的線程數(shù)的ThreadsPerChild指令,和控制允許建立的總線程數(shù)的MaxClients指令。


工作方式


每個(gè)進(jìn)程可以擁有的線程數(shù)量是固定的。服務(wù)器會(huì)根據(jù)負(fù)載情況增加或減少進(jìn)程數(shù)量。一個(gè)單獨(dú)的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)子進(jìn)程的建立。每個(gè)子進(jìn)程可以建立ThreadsPerChild數(shù)量的服務(wù)線程和一個(gè)監(jiān)聽線程,該監(jiān)聽線程監(jiān)聽接入請(qǐng)求并將其傳遞給服務(wù)線程處理和應(yīng)答。


Apache總是試圖維持一個(gè)備用(spare)或是空閑的服務(wù)線程池。這樣,客戶端無須等待新線程或新進(jìn)程的建立即可得到處理。初始化時(shí)建立的進(jìn)程數(shù)量由StartServers指令決定。隨后父進(jìn)程檢測(cè)所有子進(jìn)程中空閑線程的總數(shù),并新建或結(jié)束子進(jìn)程使空閑線程的總數(shù)維持在MinSpareThreads和MaxSpareThreads所指定的范圍內(nèi)。由于這個(gè)過程是自動(dòng)調(diào)整的,幾乎沒有必要修改這些指令的缺省值。可以并行處理的客戶端的最大數(shù)量取決于MaxClients指令。活動(dòng)子進(jìn)程的最大數(shù)量取決于MaxClients除以ThreadsPerChild的值。


有兩個(gè)指令設(shè)置了活動(dòng)子進(jìn)程數(shù)量和每個(gè)子進(jìn)程中線程數(shù)量的硬限制。要想改變這個(gè)硬限制必須完全停止服務(wù)器然后再啟動(dòng)服務(wù)器(直接重啟是不行的),ServerLimit是活動(dòng)子進(jìn)程數(shù)量的硬限制,它必須大于或等于MaxClients除以ThreadsPerChild的值。ThreadLimit是所有服務(wù)線程總數(shù)的硬限制,它必須大于或等于ThreadsPerChild指令。這兩個(gè)指令必須出現(xiàn)在其他workerMPM指令的前面。


在設(shè)置的活動(dòng)子進(jìn)程數(shù)量之外,還可能有額外的子進(jìn)程處于"正在中止"的狀態(tài)但是其中至少有一個(gè)服務(wù)線程仍然在處理客戶端請(qǐng)求,直到到達(dá)MaxClients以致結(jié)束進(jìn)程,雖然實(shí)際數(shù)量會(huì)很小。這個(gè)行為能夠通過以下禁止特別的子進(jìn)程中止的方法來避免:


* 將MaxRequestsPerChild設(shè)為"0"
* 將MaxSpareThreads和MaxClients設(shè)為相同的值


一個(gè)典型的針對(duì)workerMPM的配置如下:
ServerLimit 16
StartServers 2
MaxClients
150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild
25
在Unix中,為了能夠綁定80端口,父進(jìn)程一般都是以root身份啟動(dòng),隨后,Apache以較低權(quán)限的用戶建立子進(jìn)程和線程。User和Group指令用于設(shè)置Apache子進(jìn)程的權(quán)限。雖然子進(jìn)程必須對(duì)其提供的內(nèi)容擁有讀權(quán)限,但應(yīng)該盡可能給予它較少的特權(quán)。另外,除非使用了suexec
,否則,這些指令設(shè)置的權(quán)限將被CGI腳本所繼承。


MaxRequestsPerChild指令用于控制服務(wù)器建立新進(jìn)程和結(jié)束舊進(jìn)程的頻率。


常用指令:


StartServers
指令
StartServers指令設(shè)置了服務(wù)器啟動(dòng)時(shí)建立的子進(jìn)程數(shù)量。因?yàn)樽舆M(jìn)程數(shù)量動(dòng)態(tài)的取決于負(fù)載的輕重,所有一般沒有必要調(diào)整這個(gè)參數(shù)。


MinSpareServers
指令
MinSpareServers指令設(shè)置空閑子進(jìn)程的最小數(shù)量。所謂空閑子進(jìn)程是指沒有正在處理請(qǐng)求的子進(jìn)程。如果當(dāng)前空閑子進(jìn)程數(shù)少于MinSpareServers
,那么Apache將以最大每秒一個(gè)的速度產(chǎn)生新的子進(jìn)程。
只有在非常繁忙機(jī)器上才需要調(diào)整這個(gè)參數(shù)。將此參數(shù)設(shè)的太大通常是一個(gè)壞主意。


MaxSpareServers
指令
MaxSpareServers指令設(shè)置空閑子進(jìn)程的最大數(shù)量。所謂空閑子進(jìn)程是指沒有正在處理請(qǐng)求的子進(jìn)程。如果當(dāng)前有超過MaxSpareServers數(shù)量的空閑子進(jìn)程,那么父進(jìn)程將殺死多余的子進(jìn)程。
只有在非常繁忙機(jī)器上才需要調(diào)整這個(gè)參數(shù)。將此參數(shù)設(shè)的太大通常是一個(gè)壞主意。如果你將該指令的值設(shè)置為比MinSpareServers小,Apache將會(huì)自動(dòng)將其修改成"MinSpareServers+1"。


MaxClients
指令
MaxClients指令設(shè)置了允許同時(shí)伺服的最大接入請(qǐng)求數(shù)量。任何超過MaxClients限制的請(qǐng)求都將進(jìn)入等候隊(duì)列,直到達(dá)到ListenBacklog指令限制的最大值為止。一旦一個(gè)鏈接被釋放,隊(duì)列中的請(qǐng)求將得到服務(wù)。
對(duì)于非線程型的MPM(也就是prefork),MaxClients表示可以用于伺服客戶端請(qǐng)求的最大子進(jìn)程數(shù)量,默認(rèn)值是256。要增大這個(gè)值,你必須同時(shí)增大ServerLimit

對(duì)于線程型或者混合型的MPM(也就是beos或worker),MaxClients表示可以用于伺服客戶端請(qǐng)求的最大線程數(shù)量。線程型的beos的默認(rèn)值是50。對(duì)于混合型的MPM默認(rèn)值是16(ServerLimit)乘以25(ThreadsPerChild)的結(jié)果。因此要將MaxClients增加到超過16個(gè)進(jìn)程才能提供的時(shí)候,你必須同時(shí)增加ServerLimit的值。


MaxRequestsPerChild
指令
MaxRequestsPerChild指令設(shè)置每個(gè)子進(jìn)程在其生存期內(nèi)允許伺服的最大請(qǐng)求數(shù)量。到達(dá)MaxRequestsPerChild的限制后,子進(jìn)程將會(huì)結(jié)束。如果MaxRequestsPerChild為"0",子進(jìn)程將永遠(yuǎn)不會(huì)結(jié)束。
不同的默認(rèn)值
在mpm_netware和mpm_winnt上的默認(rèn)值是"0"。
將MaxRequestsPerChild設(shè)置成非零值有兩個(gè)好處:
*
可以防止(偶然的)內(nèi)存泄漏無限進(jìn)行,從而耗盡內(nèi)存。
*
給進(jìn)程一個(gè)有限獸命,從而有助于當(dāng)服務(wù)器負(fù)載減輕的時(shí)候減少活動(dòng)進(jìn)程的數(shù)量。


注意:
對(duì)于KeepAlive鏈接,只有第一個(gè)請(qǐng)求會(huì)被計(jì)數(shù)。事實(shí)上,它改變了每個(gè)子進(jìn)程限制最大鏈接數(shù)量的行為。


ThreadsPerChild
指令
這個(gè)指令設(shè)置了每個(gè)子進(jìn)程建立的線程數(shù)。子進(jìn)程在啟動(dòng)時(shí)建立這些線程后就不再建立新的線程了。如果使用一個(gè)類似于mpm_winnt只有一個(gè)子進(jìn)程的MPM,這個(gè)數(shù)值要足夠大,以便可以處理可能的請(qǐng)求高峰。如果使用一個(gè)類似于worker有多個(gè)子進(jìn)程的MPM,每個(gè)子進(jìn)程所擁有的所有線程的總數(shù)要足夠大,以便可以處理可能的請(qǐng)求高峰。
對(duì)于mpm_winnt,ThreadsPerChild的默認(rèn)值是64;對(duì)于其他MPM是25。


ThreadLimit
指令
這個(gè)指令設(shè)置了每個(gè)子進(jìn)程可配置的線程數(shù)ThreadsPerChild上限。任何在重啟期間對(duì)這個(gè)指令的改變都將被忽略,但對(duì)ThreadsPerChild的修改卻會(huì)生效。
使用這個(gè)指令時(shí)要特別當(dāng)心。如果將ThreadLimit設(shè)置成一個(gè)高出ThreadsPerChild實(shí)際需要很多的值,將會(huì)有過多的共享內(nèi)存被分配。如果將ThreadLimit和ThreadsPerChild設(shè)置成超過系統(tǒng)的處理能力,Apache可能無法啟動(dòng),或者系統(tǒng)將變得不穩(wěn)定。該指令的值應(yīng)當(dāng)和ThreadsPerChild可能達(dá)到的最大值保持一致。
對(duì)于mpm_winnt,ThreadLimit的默認(rèn)值是1920;對(duì)于其他MPM這個(gè)值是64。
注意:
Apache在編譯時(shí)內(nèi)部有一個(gè)硬性的限制"ThreadLimit
"(對(duì)于mpm_winnt是"ThreadLimit "),你不能超越這個(gè)限制。


ServerLimit
指令
對(duì)于preforkMPM,這個(gè)指令設(shè)置了MaxClients最大允許配置的數(shù)值。對(duì)于workerMPM,這個(gè)指令和ThreadLimit結(jié)合使用設(shè)置了MaxClients最大允許配置的數(shù)值。任何在重啟期間對(duì)這個(gè)指令的改變都將被忽略,但對(duì)MaxClients的修改卻會(huì)生效。
使用這個(gè)指令時(shí)要特別當(dāng)心。如果將ServerLimit設(shè)置成一個(gè)高出實(shí)際需要許多的值,將會(huì)有過多的共享內(nèi)存被分配。如果將ServerLimit和MaxClients設(shè)置成超過系統(tǒng)的處理能力,Apache可能無法啟動(dòng),或者系統(tǒng)將變得不穩(wěn)定。
對(duì)于preforkMPM,只有在你需要將MaxClients設(shè)置成高于默認(rèn)值256的時(shí)候才需要使用這個(gè)指令。要將此指令的值保持和MaxClients一樣。
對(duì)于workerMPM,只有在你需要將MaxClients和ThreadsPerChild設(shè)置成需要超過默認(rèn)值16個(gè)子進(jìn)程的時(shí)候才需要使用這個(gè)指令。不要將該指令的值設(shè)置的比MaxClients
和ThreadsPerChild需要的子進(jìn)程數(shù)量高。
注意:
Apache在編譯時(shí)內(nèi)部有一個(gè)硬限制"ServerLimit
"(對(duì)于preforkMPM為"ServerLimit ")。你不能超越這個(gè)限制。


配置apache使用workerMPM:


cd httpd-2.0.55
make clean
vi server/mpm/worker/worker.c
修改define
DEFAULT_THREAD_LIMIT 64 為100
即=你要設(shè)置的ThreadsPerChild的值(修改默認(rèn)ThreadsPerChild

修改define
DEFAULT_SERVER_LIMIT 16 為 25
即=你要設(shè)置的ServerLimit值(修改默認(rèn)ServerLimit值)
:wq

./configure
--prefix=/usr/local/apache --with-mpm=worker
make
make install
cd
/usr/local/apache/conf
vi httpd.conf
修改

StartServers
2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads
75
ThreadsPerChild 25
MaxRequestsPerChild 0

內(nèi)容為

StartServers
3
MaxClients 2000
ServerLimit 25
MinSpareThreads 50
MaxSpareThreads
200
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerChild 0

修改
serveradmin servername等信息為正確配置
:wq
/usr/local/apache/bin/apachectl
start
vi /etc/rc.loacl
添加 /usr/local/apache/bin/apachectl
start

PS:
用netstat -an|grep ESTABLISHED|grep 202.100.85.249:80 |wc -l
看連接數(shù),使用worker模式后,httpd進(jìn)程數(shù)變少不能反映tcp連接數(shù)



風(fēng) 2012-12-20 14:51 發(fā)表評(píng)論
]]>
Vm虛擬機(jī)訪問本地硬盤文件http://www.aygfsteel.com/gf7/archive/2012/12/12/392850.html風(fēng)風(fēng)Wed, 12 Dec 2012 02:43:00 GMThttp://www.aygfsteel.com/gf7/archive/2012/12/12/392850.htmlhttp://www.aygfsteel.com/gf7/comments/392850.htmlhttp://www.aygfsteel.com/gf7/archive/2012/12/12/392850.html#Feedback0http://www.aygfsteel.com/gf7/comments/commentRss/392850.htmlhttp://www.aygfsteel.com/gf7/services/trackbacks/392850.html

1.安裝VMtools for linux:
選擇vmware
workstation程序菜單中VM > install VMware tools...

 2. 進(jìn)入linux

掛載vmtools 安裝文件:

mount /dev/cdrom
/mnt/cdrom(vmtools的安裝文件放在vmware虛擬的cdrom中,首先要mount上這個(gè)光驅(qū)才能找到安裝文件)
進(jìn)入/mnt/cdrom 目錄,把安裝文件解壓到/tmp :

cd /mnt/cdrom
tar -zxvf
VMwareTools-5.0.0-12124.i386.tar.gz -C /tmp(把安裝文件解壓到/tmp)
執(zhí)行vwware的安裝腳本:
cd
/tmp/vmware-tools-distrib
./vmware-install.pl

 在這里,安裝程序會(huì)詢問安裝文件存放位置和設(shè)置分辨率等一系列問題,在大多數(shù)情況下,安裝默認(rèn)配置vmware
tools就可以正常工作,因此,這里對(duì)每一個(gè)問題按回車鍵選擇默認(rèn)配置。

安裝完以后,vmware會(huì)添加一個(gè)vmhgfs的模塊到內(nèi)核中,可以使用lsmod查看.

 3.設(shè)置共享文件夾:

選擇vmware
workstation程序菜單中VM>Settings>Options>Shared Folders
>Properties
點(diǎn)擊對(duì)話框右下的“add”按鈕,點(diǎn)擊“下一步”
在文本框“name”中輸入共享目錄的名字(這里填寫的目錄名以后VM的linux系統(tǒng)中將顯示出同樣的目錄名),比如:win_linux_share
下一個(gè)對(duì)話框是選擇共享的方式:Enable
this share是指這個(gè)共享長期有效,目錄可讀寫;Read-only方式是指這個(gè)共享長期有效,目錄只讀;Disable after this
session方式是指下次ghost computer被關(guān)閉或掛起后,共享將會(huì)失效。一般情況下選擇Enable this share然后點(diǎn)擊“完成”
shared folder設(shè)置完畢
4.在VM的linux查看shared
folder目錄的使用
cd /mnt/hgfs

/mnt/hgfs/目錄下就同步了windows中的win_linux_share文件夾

 [root@localhost network-scripts]# cd
/mnt/hgfs
[root@localhost hgfs]# ls
win_linux_share
[root@localhost
hgfs]# cd win_linux_share/
[root@localhost win_linux_share]#
ls
sunzhaoyao.txt



風(fēng) 2012-12-12 10:43 發(fā)表評(píng)論
]]>
NFS文件無法寫入的權(quán)限問題http://www.aygfsteel.com/gf7/archive/2012/12/12/392843.html風(fēng)風(fēng)Wed, 12 Dec 2012 02:06:00 GMThttp://www.aygfsteel.com/gf7/archive/2012/12/12/392843.htmlhttp://www.aygfsteel.com/gf7/comments/392843.htmlhttp://www.aygfsteel.com/gf7/archive/2012/12/12/392843.html#Feedback0http://www.aygfsteel.com/gf7/comments/commentRss/392843.htmlhttp://www.aygfsteel.com/gf7/services/trackbacks/392843.html
環(huán)境:

OS:Red Hat Linux As 5


1.服務(wù)器上創(chuàng)建共享目錄
mkdir
doc_share


2.編輯exports文件
vim /etc/exports
寫入
/doc_share
192.168.2.131/255.255.255.0(rw,sync)
格式是:
要共享的目錄
共享的IP及掩碼或者域名(權(quán)限,同步更新)


3.啟動(dòng)服務(wù)
/etc/init.d/portmap restart
/etc/init.d/nfs restart
chkconfig nfs
on
chkconfig portmap on

然后關(guān)閉防火墻以及更改Selinux關(guān)于NIS的選項(xiàng)
/etc/init.d/iptables stop (防護(hù)墻服務(wù)關(guān)閉)
chkconfig iptables off
system-config-selinux (設(shè)置selinux)


查看共享的東西
[root@rac1
/]# exportfs -rv
exporting 192.168.2.131/255.255.255.0:/doc_share


試著在本機(jī)看能否加載
mount
192.168.2.131:/doc_share /mnt

[root@rac1 doc_share]# echo
aa>aa.txt
[root@rac1 doc_share]# ls
aa.txt
[root@rac1 /]# cd
/mnt
[root@rac1 mnt]# ls
aa.txt


4.客戶端
手工mount:
mount -o nolock 192.168.2.131:/doc_share
/mnt
這個(gè)時(shí)候可以看到在節(jié)點(diǎn)1上內(nèi)容了.
[root@rac2
mnt]# cd /mnt
[root@rac2 mnt]# ls
aa.txt

自動(dòng)mount:
編輯fstab文件,實(shí)現(xiàn)開機(jī)自動(dòng)掛載
mount -t nfs IP:/目錄 掛載到的目錄
(此為臨時(shí)掛載)
如:
mount -t nfs
192.168.0.9:/doce /doc
vim /etc/fstab 添加如下內(nèi)容
192.168.2.131:/doc_share /mnt             nfs    
defaults        0 0



相關(guān)的一些命令:
showmout命令對(duì)于NFS的操作和查錯(cuò)有很大的幫助.
showmout

-a:這個(gè)參數(shù)是一般在NFS SERVER上使用,是用來顯示已經(jīng)mount上本機(jī)nfs目錄的cline機(jī)器.
-e:顯示指定的NFS
SERVER上export出來的目錄.
例如:
showmount -e 192.168.0.30

Export list for localhost:
/tmp *
/home/linux *.linux.org

/home/public (everyone)
/home/test 192.168.0.100


exportfs命令:
如果我們?cè)趩?dòng)了NFS之后又修改了/etc/exports,是不是還要重新啟動(dòng)nfs呢?這個(gè)時(shí)候我們就可以用exportfs命令來使改動(dòng)立刻生效,該命令格式如下:
exportfs
[-aruv]
-a :全部mount或者unmount /etc/exports中的內(nèi)容
-r :重新mount
/etc/exports中分享出來的目錄
-u :umount 目錄
-v :在 export
的時(shí)候,將詳細(xì)的信息輸出到屏幕上.
具體例子:
[root @test root]# exportfs
-rv
<==全部重新 export 一次!
exporting
192.168.0.100:/home/test
exporting 192.168.0.*:/home/public
exporting
*.the9.com:/home/linux
exporting *:/home/public
exporting *:/tmp

reexporting 192.168.0.100:/home/test to kernel

exportfs -au
<==全部都卸載了
-------------------------------------------------------------------------------
今天在機(jī)器上配置NFS文件系統(tǒng),在/etc/exports中加入以下信息:
    /testfs 10.0.0.0/8(rw)
    重啟NFS服務(wù)以后,在客戶機(jī)通過mount -o rw -t nfs 10.214.54.29:/testfs /rd1命令將網(wǎng)絡(luò)文件mount到本地。執(zhí)行完成之后,目錄是可以訪問了,但無法寫入。感覺有點(diǎn)奇怪,明明在命令中指定可以寫入了。于是到網(wǎng)上搜索資料,發(fā)現(xiàn)exports目錄權(quán)限中,有這么一個(gè)參數(shù)no_root_squash。其作用是:登入 NFS 主機(jī)使用分享目錄的使用者,如果是 root 的話,那么對(duì)于這個(gè)分享的目錄來說,他就具有                      root 的權(quán)限!。默認(rèn)情況使用的是相反參數(shù)                     root_squash:在登入 NFS 主機(jī)使用分享之目錄的使用者如果是 root 時(shí),那么這個(gè)使用者的權(quán)限將被壓縮成為匿名使用者,通常他的                      UID 與 GID 都會(huì)變成 nobody 那個(gè)身份。
    因?yàn)槲业目蛻舳耸鞘褂胷oot登錄的,自然權(quán)限被壓縮為nobody了,難怪無法寫入。將配置信息改為:
    /testfs 10.0.0.0/8(rw,no_root_squash)
    據(jù)說有點(diǎn)不安全,但問題是解決了。
    另外,在測(cè)試NFS文件系統(tǒng)時(shí),會(huì)經(jīng)常mount和umount文件,但有時(shí)會(huì)出現(xiàn)device is busy的錯(cuò)誤提示。你肯定感到很奇怪,我明明沒有使用啊,看看你當(dāng)前所在的目錄,是不是在mount的文件目錄中?回退到上層目錄重新umount,是不是OK了?


風(fēng) 2012-12-12 10:06 發(fā)表評(píng)論
]]>
weblogic設(shè)置上傳文件訪問權(quán)限http://www.aygfsteel.com/gf7/archive/2012/12/10/392750.html風(fēng)風(fēng)Mon, 10 Dec 2012 14:56:00 GMThttp://www.aygfsteel.com/gf7/archive/2012/12/10/392750.htmlhttp://www.aygfsteel.com/gf7/comments/392750.htmlhttp://www.aygfsteel.com/gf7/archive/2012/12/10/392750.html#Feedback0http://www.aygfsteel.com/gf7/comments/commentRss/392750.htmlhttp://www.aygfsteel.com/gf7/services/trackbacks/392750.html

風(fēng) 2012-12-10 22:56 發(fā)表評(píng)論
]]>
在android上動(dòng)態(tài)實(shí)現(xiàn)ichartjs的3D柱形圖http://www.aygfsteel.com/gf7/archive/2012/11/30/392279.html風(fēng)風(fēng)Fri, 30 Nov 2012 07:00:00 GMThttp://www.aygfsteel.com/gf7/archive/2012/11/30/392279.htmlhttp://www.aygfsteel.com/gf7/comments/392279.htmlhttp://www.aygfsteel.com/gf7/archive/2012/11/30/392279.html#Feedback0http://www.aygfsteel.com/gf7/comments/commentRss/392279.htmlhttp://www.aygfsteel.com/gf7/services/trackbacks/392279.html

ichartjs是一款基于HTML5的圖形庫。使用純javascript語言,利用HTML5的canvas標(biāo)簽繪制各式圖形。ichartjs可以為web應(yīng)用提供簡(jiǎn)單、直觀、可交互的體驗(yàn)級(jí)圖表組件。是web圖表方面的解決方案。最近正好在學(xué)HTML5,順便就用ichartjs來練習(xí)。ichartjs目前支持餅圖、折線圖、區(qū)域圖、柱形圖、條形圖。ichartjs是基于Apache License 2.0 協(xié)議的開源項(xiàng)目。今天介紹的是如何在android手機(jī)上動(dòng)態(tài)實(shí)現(xiàn)3D柱形圖。若想詳細(xì)了解ichartjs,可以訪問ichartjs官網(wǎng):http://www.ichartjs.cn/index.html

實(shí)現(xiàn)主要原理是所需實(shí)現(xiàn)的數(shù)據(jù)打包成json格式,因?yàn)閕chartjs規(guī)定的數(shù)據(jù)源統(tǒng)一采用json對(duì)象方式。數(shù)據(jù)源分為單一數(shù)據(jù)源與集合多值數(shù)據(jù)源,單一數(shù)據(jù)源的值為單一的數(shù)值,而集合多值數(shù)據(jù)源為數(shù)值集合。3D柱形圖使用的單一的數(shù)據(jù)源。廢話不多說了,直接上代碼。

首先編寫的是封裝數(shù)據(jù)的實(shí)體類Contact:

  1. package com.chinasofti.html;  
  2.   
  3. public class Contact {  
  4.     private String name; // 瀏覽器的名稱   
  5.     private double value; // 瀏覽器對(duì)應(yīng)的所占市場(chǎng)份額值   
  6.     private String color; // 在柱形圖中所顯示的顏色   
  7.       
  8.     /** 
  9.      * 構(gòu)造函數(shù) 
  10.      * @param name 瀏覽器的名稱 
  11.      * @param value 瀏覽器對(duì)應(yīng)的所占市場(chǎng)份額值 
  12.      * @param color 在柱形圖中所顯示的顏色 
  13.      */  
  14.     public Contact(String name, double value, String color) {  
  15.         this.name = name;  
  16.         this.value = value;  
  17.         this.color = color;  
  18.     }  
  19.       
  20.     // 下面是三個(gè)實(shí)例變量的getters and setters   
  21.     public String getName() {  
  22.         return name;  
  23.     }  
  24.     public void setName(String name) {  
  25.         this.name = name;  
  26.     }  
  27.     public double getValue() {  
  28.         return value;  
  29.     }  
  30.     public void setValue(double value) {  
  31.         this.value = value;  
  32.     }  
  33.     public String getColor() {  
  34.         return color;  
  35.     }  
  36.     public void setColor(String color) {  
  37.         this.color = color;  
  38.     }  
  39.       
  40. }  

接著創(chuàng)建一個(gè)list將所需要的contact對(duì)象添加到list中:

  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. import com.chinasofti.html.Contact;  
  5.   
  6. public class ContactService {  
  7.   
  8.     public List<Contact> getContacts() {  
  9.         List<Contact> contacts = new ArrayList<Contact>();  
  10.         contacts.add(new Contact("IE"32.85"#a5c2d5"));  
  11.         contacts.add(new Contact("Chrome"33.59"#cbab4f"));  
  12.         contacts.add(new Contact("Firefox"22.85"#76a871"));  
  13.         contacts.add(new Contact("Safari"7.39"#9f7961"));  
  14.         contacts.add(new Contact("Opera"1.63"#a56f8f"));  
  15.         contacts.add(new Contact("Other"1.69"#6f83a5"));  
  16.         return contacts;  
  17.     }  
  18. }  

然后編寫android主界面代碼,實(shí)現(xiàn)list轉(zhuǎn)換成json格式字符串,并實(shí)現(xiàn)和html文件的交互:

 

  1. import java.util.List;  
  2.   
  3. import org.json.JSONArray;  
  4. import org.json.JSONException;  
  5. import org.json.JSONObject;  
  6.   
  7. import android.app.Activity;  
  8. import android.os.Bundle;  
  9. import android.util.Log;  
  10. import android.webkit.WebView;  
  11.   
  12. public class MainActivity extends Activity {  
  13.     private static final String TAG = "MainActivity";  
  14.     private ContactService contactService; // 構(gòu)建list的類   
  15.     private WebView webView;  
  16.   
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.main);  
  21.   
  22.         contactService = new ContactService();  
  23.         webView = (WebView) this.findViewById(R.id.webView);  
  24.         webView.getSettings().setJavaScriptEnabled(true); // 允許使用javascript腳本語言   
  25.         webView.getSettings().setBuiltInZoomControls(true); // 設(shè)置可以縮放   
  26.         // 設(shè)置javaScript可用于操作MainActivity類   
  27.         webView.addJavascriptInterface(this,TAG);  
  28.         webView.loadUrl("file:///android_asset/3dchart.html");  
  29.     }  
  30.       
  31.     /** 
  32.      * 實(shí)現(xiàn)將list轉(zhuǎn)換成json格式字符串 
  33.      * @return json格式的字符串 
  34.      */  
  35.     public String getContacts() {  
  36.         List<Contact> contacts = contactService.getContacts();  
  37.         String json = null;  
  38.         try {  
  39.             JSONArray array = new JSONArray();  
  40.             for (Contact contact : contacts) {  
  41.   
  42.                 JSONObject item = new JSONObject();  
  43.                 item.put("name", contact.getName());  
  44.                 item.put("value", contact.getValue());  
  45.                 item.put("color", contact.getColor());  
  46.                 array.put(item);  
  47.             }  
  48.             json = array.toString();  
  49.             Log.i(TAG, json);  
  50.             // webView.loadUrl("javascript:show('" + json + "')");   
  51.         } catch (JSONException e) {  
  52.             e.printStackTrace();  
  53.         }  
  54.         return json;  
  55.     }  
  56. }  

最后是編輯html文件。要實(shí)現(xiàn)ichartjs表圖,首先要保證在assets目錄下已導(dǎo)入了ichart - 1.0.js。然后對(duì)html文件進(jìn)行編輯:

 

  1. <!DOCTYPE html>  
  2. <html>  
  3.     <head>  
  4.         <meta charset="UTF-8" />  
  5.         <title>Hello World</title>  
  6.         <meta name="Description" content="" />  
  7.         <meta name="Keywords" content="" />  
  8.         <script type="text/javascript" src="ichart-1.0.js"></script>  
  9.         <script type="text/javascript">  
  10.             var data = new Array();  
  11.             var contact = window.MainActivity.getContacts(); //得到MainActivity中轉(zhuǎn)換出的json字符串  
  12.             eval('data='+contact); //得到j(luò)son數(shù)據(jù)  
  13.   
  14. $(function(){     
  15.     new iChart.Column3D({  
  16.         render : 'canvasDiv', //渲染的Dom目標(biāo),canvasDiv為Dom的ID  
  17.         data: data, //綁定數(shù)據(jù)  
  18.         title : 'Top 5 Browsers in August 2012', //設(shè)置標(biāo)題  
  19.         showpercent:true, //顯示百分比  
  20.         decimalsnum:2,   
  21.         width : 800, //設(shè)置寬度,默認(rèn)單位為px  
  22.         height : 400, //設(shè)置高度,默認(rèn)單位為px  
  23.         align:'left',  
  24.         offsetx:50,  
  25.         legend : {  
  26.             enable : true  
  27.         },  
  28.         coordinate:{ //配置自定義坐標(biāo)軸  
  29.             scale:[{ //配置自定義值軸  
  30.                  width:600,  
  31.                  position:'left', //配置左值軸     
  32.                  start_scale:0, //設(shè)置開始刻度為0  
  33.                  end_scale:40, //設(shè)置結(jié)束刻度為40  
  34.                  scale_space:8, //設(shè)置刻度間距為8  
  35.                  listeners:{ //配置事件  
  36.                     parseText:function(t,x,y){ //設(shè)置解析值軸文本  
  37.                         return {text:t+"%"}  
  38.                     }  
  39.                 }  
  40.             }]  
  41.         }  
  42.     }).draw(); //調(diào)用繪圖方法開始繪圖  
  43. });  
  44.             </script>  
  45.         </head>  
  46.         <body>  
  47.             <div id='canvasDiv'></div>  
  48.         </body>  
  49. </html>  

最后得到效果為:

 


 



風(fēng) 2012-11-30 15:00 發(fā)表評(píng)論
]]>
使用Oracle trunc 來指定精確的年月日時(shí)分秒http://www.aygfsteel.com/gf7/archive/2012/07/01/381933.html風(fēng)風(fēng)Sun, 01 Jul 2012 15:20:00 GMThttp://www.aygfsteel.com/gf7/archive/2012/07/01/381933.htmlhttp://www.aygfsteel.com/gf7/comments/381933.htmlhttp://www.aygfsteel.com/gf7/archive/2012/07/01/381933.html#Feedback1http://www.aygfsteel.com/gf7/comments/commentRss/381933.htmlhttp://www.aygfsteel.com/gf7/services/trackbacks/381933.html

函數(shù)trunc是一個(gè)Oracle內(nèi)置的函數(shù),可以對(duì)date類型數(shù)據(jù)進(jìn)行“度身裁剪”,來適應(yīng)不同類型的數(shù)據(jù)需求。

 

在前篇《Oracle日期類型操作幾個(gè)問題》中,我們已經(jīng)了解到date類型的基本知識(shí)。date類型是一種包括年、月、日、時(shí)、分和秒的數(shù)據(jù)類型,可以表示相對(duì)精確的時(shí)間信息。內(nèi)部存儲(chǔ)上,date類型是類似于數(shù)字類型的,可以通過加減操作實(shí)現(xiàn)對(duì)日期的推進(jìn)和后退。

 

但是,日期格式的精確常常給我們帶來一些困擾,特別是其中的時(shí)分秒信息。很多時(shí)候,我們對(duì)這部分信息是不需要的。比如指定日期查詢、只顯示天信息等等。借助To_char雖然可以實(shí)現(xiàn)一部分這種需要,但是這樣做格式上比較復(fù)雜,而且進(jìn)行了數(shù)據(jù)類型的轉(zhuǎn)換。是否存在不變化數(shù)據(jù)類型的方法,對(duì)日期型數(shù)據(jù)進(jìn)行處理。答案就是trunc函數(shù)。

 

trunc(date)

 

截?cái)嗪瘮?shù)trunc的作用就是將日期類型數(shù)據(jù)按照指定格式截?cái)啵祷匾粋€(gè)日期變量數(shù)據(jù)。例如:

 

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

 

TO_CHAR(SYSDATE,'YYYY-MM-DDHH2

------------------------------

2010-12-10 20:39:58

 

SQL> select trunc(sysdate) from dual;

 

TRUNC(SYSDATE)

--------------

2010-12-10

 

SQL> select to_char(trunc(sysdate),'yyyy-mm-dd hh24:mi:ss') from dual;

 

TO_CHAR(TRUNC(SYSDATE),'YYYY-M

------------------------------

2010-12-10 00:00:00

 

默認(rèn)情況下,sysdate函數(shù)返回的日期類型數(shù)據(jù)包括當(dāng)前的具體時(shí)間。通過trunc(date)的處理,直接截取到天信息,返回指定天的零時(shí)。

 

trunc函數(shù)還支持一個(gè)重載參數(shù),格式字符串:trunc(date,format),用于指定截?cái)嗟奈恢谩H缦拢?/font>

 

//截?cái)嗟侥?/font>

SQL> select trunc(sysdate,'yyyy') from dual;

 

TRUNC(SYSDATE,'YYYY')

---------------------

2010-1-1

//截?cái)嗟皆?/font>

SQL> select trunc(sysdate,'mm') from dual;

 

TRUNC(SYSDATE,'MM')

-------------------

2010-12-1

//截?cái)嗟饺?/font>

SQL> select trunc(sysdate,'dd') from dual;

 

TRUNC(SYSDATE,'DD')

-------------------

2010-12-10

//截?cái)嗟叫r(shí)

SQL> select trunc(sysdate,'hh24') from dual;

 

TRUNC(SYSDATE,'HH24')

---------------------

2010-12-10 20:00:00

//截?cái)嗟椒昼?/font>

SQL> select trunc(sysdate,'mi') from dual;

 

TRUNC(SYSDATE,'MI')

-------------------

2010-12-10 20:52:00

 

使用不同的格式標(biāo)志,可以指示不同的截?cái)辔恢茫@取各種零刻時(shí)間。

 

 

格式字符串

說明

yyyy或者year

年度第一天(一月一日零時(shí))

mm或者month

月份第一天(一日零時(shí))

dd或者day

日期零時(shí)(00:00:00)

小時(shí)

hh或者h(yuǎn)h24

幾時(shí)整(XX:00:00)

mi

幾分整(XX:XX:00)

 

借助trunc函數(shù)和日期類型加減處理,我們可以實(shí)現(xiàn)一些特殊日期的設(shè)置,實(shí)現(xiàn)日期功能,使用在例如Job調(diào)度方面。

 

//明天零點(diǎn)

SQL> select to_char(trunc(sysdate)+1,'yyyy-mm-dd hh24:mi:ss') from dual;

 

TO_CHAR(TRUNC(SYSDATE)+1,'YYYY

------------------------------

2010-12-11 00:00:00

 

//當(dāng)天早上十點(diǎn)

SQL> select to_char(trunc(sysdate)+10/24,'yyyy-mm-dd hh24:mi:ss') from dual;

 

TO_CHAR(TRUNC(SYSDATE)+10/24,'

------------------------------

2010-12-10 10:00:00

 

//當(dāng)月三號(hào),上午10點(diǎn)半

SQL> select to_char(trunc(sysdate,'mm')+2+10/24+1/48, 'yyyy-mm-dd hh24:mi:ss') from dual;

注:trunc(sysdate,'mm')將時(shí)間取到當(dāng)前月的1號(hào)零時(shí)零分零秒,那么加上2就表示當(dāng)前月的3好零時(shí)零分零秒,再加上'10/24'('10/24'本身表示10個(gè)小時(shí))就是表示當(dāng)月3號(hào)的十點(diǎn)零分零秒,再加上'1/48'('1/48'本身表示30分鐘)就表示當(dāng)月3號(hào)十點(diǎn)三十分零秒

 

TO_CHAR(TRUNC(SYSDATE,'MM')+2+

------------------------------

2010-12-03 10:30:00 

 

較復(fù)雜的to_char,trunc更加可以發(fā)揮日期類型數(shù)值本身的特色和優(yōu)勢(shì),無論是代碼整潔度還是處理效率都是值得關(guān)注的。

 

額外多說一句,trunc本身還具有處理數(shù)字截?cái)喙δ埽糜诮財(cái)嘀付ㄎ粩?shù)的數(shù)字類型。

 

//默認(rèn)截?cái)嗟秸麛?shù),不進(jìn)行四舍五入;

SQL> select trunc(15.743) from dual;

 

TRUNC(15.743)

-------------

          15

//截?cái)嗟叫?shù)點(diǎn)后一位;

SQL> select trunc(15.793,1) from dual;

 

TRUNC(15.793,1)

---------------

          15.7

//截?cái)嗟叫?shù)點(diǎn)前一位;

SQL> select trunc(15.793,-1) from dual;

 

TRUNC(15.793,-1)

----------------

             10

 

trunc對(duì)數(shù)字和日期類型處理,也折射出日期類型數(shù)據(jù)和數(shù)字之間的間接關(guān)系。

 

原文地址:http://space.itpub.net/17203031/viewspace-681548

 


 trunc不僅可以用來處理日期,還可以用來處理數(shù)字

TRUNC(i1,i2)截取i1的i2位而不四舍五入,如果i2是正就截取小數(shù)點(diǎn)右邊第幾位,如果是i2是負(fù)就是截取小數(shù)點(diǎn)左邊第幾位。

例如:

 

  1. select TRUNC(0.10005767,1) from dual; 
  2.  
  3. TRUNC(0.10005767,1) 1 0.1

而如果trunc函數(shù)沒有指定參i2,那么其作用為取整,且取整的時(shí)候不會(huì)四舍五入

例如:

  1. select TRUNC(2.60005767) from dual; 
  2.  
    TRUNC(2.60005767)


round函數(shù)和trunc函數(shù)的區(qū)別:

ROUND(i1,i2)四舍五入,i1四舍五入,如果i2是正保留小數(shù)點(diǎn)后i2位。如果是i2是負(fù)數(shù),表示保留小數(shù)點(diǎn)前面(左邊第幾位)

TRUNC(i1,i2)截取i1的i2位而不四舍五入,如果i2是正就截取小數(shù)點(diǎn)右邊第幾位,如果是i2是負(fù)就是截取小數(shù)點(diǎn)左邊第幾位。

 



]]>
Quartz 2.1.5 web應(yīng)用配置http://www.aygfsteel.com/gf7/archive/2012/07/01/381920.html風(fēng)風(fēng)Sun, 01 Jul 2012 09:45:00 GMThttp://www.aygfsteel.com/gf7/archive/2012/07/01/381920.htmlhttp://www.aygfsteel.com/gf7/comments/381920.htmlhttp://www.aygfsteel.com/gf7/archive/2012/07/01/381920.html#Feedback0http://www.aygfsteel.com/gf7/comments/commentRss/381920.htmlhttp://www.aygfsteel.com/gf7/services/trackbacks/381920.html1、下載quartz
http://www.terracotta.org/download/reflector.jsp?b=tcdistributions&i=quartz-2.1.5.tar.gz

將slf4j-log4j12-1.6.1.jar
slf4j-api-1.6.1.jar
quartz-all-2.1.5.jar
放入WEB-INF\lib下
2、編寫自己的job

 ReportControlJob.javapackage net.risesoft.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class ReportControlJob implements Job {
 
 private static int count = 0;
 public void execute(JobExecutionContext arg0) throws JobExecutionException {
  System.out.println("hello,world!"+arg0.getFireInstanceId()+"--"+arg0.getFireTime()+"---"+arg0.getNextFireTime()+"---"+count++);
  
 }
 
}


3、編寫配置文件
     quartz.properties: 
quartz.propertiesv#ReportControlScheduler為你的job類
org.quartz.scheduler.instanceName = ReportControlScheduler
org.quartz.scheduler.instanceId = one  
orgorg.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool     
org.quartz.threadPool.threadCount = 1
org.quartz.threadPool.threadPriority = 4   
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = /config/quartz/quartz_job.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true org.quartz.scheduler.instanceName = ReportControlScheduler
org.quartz.scheduler.instanceId = one  
orgorg.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool     
org.quartz.threadPool.threadCount = 1
org.quartz.threadPool.threadPriority = 4   
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
#xml配置文件存放位置,我放在了src/config/quartz/ 下了,編譯后會(huì)放到classes/config/quartzconfig/quartz/ 下
org.quartz.plugin.jobInitializer.fileNames = /config/quartz/quartz_job.xml 
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
quartz_job.xml:
quart_job.xml<?xml version='1.0' encoding='utf-8'?>
<job-scheduling-data
 xmlns=" xmlns:xsi=" xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData  version="1.8">
 <schedule>
  <job>
   <name>ReportControlScheduler</name>
   <group>Report</group>
   <description>報(bào)表控制填報(bào)鎖</description>
   <job-class>net.risesoft.quartz.ReportControlJob</job-class>
  </job>
  <trigger>
   <cron>
    <name>report-trigger</name>
    <group>Report_Group</group>
    <job-name>ReportControlScheduler</job-name>
    <job-group>Report</job-group>
    <cron-expression>0 0/3 * * * ?</cron-expression>
   </cron>
  </trigger>
 </schedule>
</job-scheduling-data> 
web.xml:加入一個(gè)servlet,主要quartz.properties文件的位置,我是跟我的quartz_job.xml文件放在一起
web.xml<servlet>    
        <servlet-name>QuartzInitializer</servlet-name>    
        <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>    
        <init-param>    
            <param-name>config-file</param-name>    
            <param-value>/config/quartz/quartz.properties</param-value>    
        </init-param>    
        <init-param>    
            <param-name>shutdown-on-unload</param-name>    
            <param-value>true</param-value>    
        </init-param>    
        <init-param>    
            <param-name>start-scheduler-on-load</param-name>    
            <param-value>true</param-value>    
        </init-param>   
        <load-on-startup>    
             1     
        </load-on-startup>    
  </servlet>
4、啟動(dòng)應(yīng)用服務(wù)器,一切ok
5、關(guān)于觸發(fā)器的時(shí)間控制說明:
先說干貨:quartz_job.xml中的
<trigger>
   <cron>
    <name>report-trigger</name>
    <group>Report_Group</group>
    <job-name>ReportControlScheduler</job-name>
    <job-group>Report</job-group>
    <cron-expression>0 0/3 * * * ?</cron-expression>
   </cron>
  </trigger>
就是對(duì)觸發(fā)時(shí)間的描述,我這里采用的是CronTrigger的方式。下邊詳細(xì)描述了時(shí)間的控制。
      
Trigger是一個(gè)抽象類,它有三個(gè)子類:SimpleTrigger,CronTrigger和NthIncludedDayTrigger。前兩個(gè)比較常用。

1。SimpleTrigger:這是一個(gè)非常簡(jiǎn)單的類,我們可以定義作業(yè)的觸發(fā)時(shí)間,并選擇性的設(shè)定重復(fù)間隔和重復(fù)次數(shù)。

2。CronTrigger:這個(gè)觸發(fā)器的功能比較強(qiáng)大,而且非常靈活,但是你需要掌握有關(guān)Cron表達(dá)式的知識(shí)。如果你是一個(gè)Unix系統(tǒng)愛好者,你很可能已經(jīng)具備這種知識(shí),但是如果你不了解Cron表達(dá)式,請(qǐng)看下面的Cron詳解:



Cron表達(dá)式由6或7個(gè)由空格分隔的時(shí)間字段組成,如表1所示: 表1 Cron表達(dá)式時(shí)間字段

位置

時(shí)間域名

允許值

允許的特殊字符

1

0-59

, - * /

2

分鐘

0-59

, - * /

3

小時(shí)

0-23

, - * /

4

日期

1-31

, - * ? / L W C

5

月份

1-12

, - * /

6

星期

1-7

, - * ? / L C #

7

年(可選)

空值1970-2099

, - * /



Cron表達(dá)式的時(shí)間字段除允許設(shè)置數(shù)值外,還可使用一些特殊的字符,提供列表、范圍、通配符等功能,細(xì)說如下:

●星號(hào)(*):可用在所有字段中,表示對(duì)應(yīng)時(shí)間域的每一個(gè)時(shí)刻,例如,*在分鐘字段時(shí),表示“每分鐘”;

●問號(hào)(?):該字符只在日期和星期字段中使用,它通常指定為“無意義的值”,相當(dāng)于點(diǎn)位符;

●減號(hào)(-):表達(dá)一個(gè)范圍,如在小時(shí)字段中使用“10-12”,則表示從10到12點(diǎn),即10,11,12;

●逗號(hào)(,):表達(dá)一個(gè)列表值,如在星期字段中使用“MON,WED,FRI”,則表示星期一,星期三和星期五;

●斜杠(/):x/y表達(dá)一個(gè)等步長序列,x為起始值,y為增量步長值。如在分鐘字段中使用0/15,則表示為0,15,30和45秒,而5/15在分鐘字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y;

●L:該字符只在日期和星期字段中使用,代表“Last”的意思,但它在兩個(gè)字段中意思不同。L在日期字段中,表示這個(gè)月份的最后一天,如一月的31號(hào),非閏年二月的28號(hào);如果L用在星期中,則表示星期六,等同于7。但是,如果L出現(xiàn)在星期字段里,而且在前面有一個(gè)數(shù)值X,則表示“這個(gè)月的最后X天”,例如,6L表示該月的最后星期五;



●W:該字符只能出現(xiàn)在日期字段里,是對(duì)前導(dǎo)日期的修飾,表示離該日期最近的工作日。例如15W表示離該月15號(hào)最近的工作日,如果該月15號(hào)是星期六,則匹配14號(hào)星期五;如果15日是星期日,則匹配16號(hào)星期一;如果15號(hào)是星期二,那結(jié)果就是15號(hào)星期二。但必須注意關(guān)聯(lián)的匹配日期不能夠跨月,如你指定1W,如果1號(hào)是星期六,結(jié)果匹配的是3號(hào)星期一,而非上個(gè)月最后的那天。W字符串只能指定單一日期,而不能指定日期范圍;



●LW組合:在日期字段可以組合使用LW,它的意思是當(dāng)月的最后一個(gè)工作日;

●井號(hào)(#):該字符只能在星期字段中使用,表示當(dāng)月某個(gè)工作日。如6#3表示當(dāng)月的第三個(gè)星期五(6表示星期五,#3表示當(dāng)前的第三個(gè)),而4#5表示當(dāng)月的第五個(gè)星期三,假設(shè)當(dāng)月沒有第五個(gè)星期三,忽略不觸發(fā);

● C:該字符只在日期和星期字段中使用,代表“Calendar”的意思。它的意思是計(jì)劃所關(guān)聯(lián)的日期,如果日期沒有被關(guān)聯(lián),則相當(dāng)于日歷中所有日期。例如5C在日期字段中就相當(dāng)于日歷5日以后的第一天。1C在星期字段中相當(dāng)于星期日后的第一天。Cron表達(dá)式對(duì)特殊字符的大小寫不敏感,對(duì)代表星期的縮寫英文大小寫也不敏感。表2下面給出一些完整的Cron表示式的實(shí)例:

表2 Cron表示式示例

表示式

說明

"0 0 12 * * ? "

每天12點(diǎn)運(yùn)行

"0 15 10 ? * *"

每天10:15運(yùn)行

"0 15 10 * * ?"

每天10:15運(yùn)行

"0 15 10 * * ? *"

每天10:15運(yùn)行

"0 15 10 * * ? 2008"

在2008年的每天10:15運(yùn)行

"0 * 14 * * ?"

每天14點(diǎn)到15點(diǎn)之間每分鐘運(yùn)行一次,開始于14:00,結(jié)束于14:59。

"0 0/5 14 * * ?"

每天14點(diǎn)到15點(diǎn)每5分鐘運(yùn)行一次,開始于14:00,結(jié)束于14:55。

"0 0/5 14,18 * * ?"

每天14點(diǎn)到15點(diǎn)每5分鐘運(yùn)行一次,此外每天18點(diǎn)到19點(diǎn)每5鐘也運(yùn)行一次。

"0 0-5 14 * * ?"

每天14:00點(diǎn)到14:05,每分鐘運(yùn)行一次。

"0 10,44 14 ? 3 WED"

3月每周三的14:10分到14:44,每分鐘運(yùn)行一次。

"0 15 10 ? * MON-FRI"

每周一,二,三,四,五的10:15分運(yùn)行。

"0 15 10 15 * ?"

每月15日10:15分運(yùn)行。

"0 15 10 L * ?"

每月最后一天10:15分運(yùn)行。

"0 15 10 ? * 6L"

每月最后一個(gè)星期五10:15分運(yùn)行。

"0 15 10 ? * 6L 2007-2009"

在2007,2008,2009年每個(gè)月的最后一個(gè)星期五的10:15分運(yùn)行。

"0 15 10 ? * 6#3"

每月第三個(gè)星期五的10:15分運(yùn)行。

 



]]>
LoginAny 使用筆記http://www.aygfsteel.com/gf7/archive/2011/08/22/357077.html風(fēng)風(fēng)Mon, 22 Aug 2011 14:52:00 GMThttp://www.aygfsteel.com/gf7/archive/2011/08/22/357077.htmlhttp://www.aygfsteel.com/gf7/comments/357077.htmlhttp://www.aygfsteel.com/gf7/archive/2011/08/22/357077.html#Feedback1http://www.aygfsteel.com/gf7/comments/commentRss/357077.htmlhttp://www.aygfsteel.com/gf7/services/trackbacks/357077.html

LoginAny 使用筆記
 
想實(shí)現(xiàn)在家辦公,當(dāng)公司有急事的時(shí)候,可以在家就處理掉;不必在家里和公司之間copy文件,免去勞苦奔波之苦。于是開始用遠(yuǎn)程軟件。
 
1. VNN. 免費(fèi),主要面向游戲平臺(tái)。
申請(qǐng)2個(gè)用戶,互相加為密友,能夠2臺(tái)機(jī)器互訪,但是只有vnnc302201-winall.zip版本能用(密友功能),且不能升級(jí),一旦升級(jí)之后,將沒有了密友功能。
用了一段時(shí)間,很不錯(cuò)。但不久之后,本地域內(nèi)3389端口封了。理解,因?yàn)檫h(yuǎn)程桌面的3389是個(gè)不安全的端口。

其實(shí),把被控機(jī)器的Terminal Service 3389端口改掉, 理論上也是可行的,但是還是比較麻煩。
 
2. Hamachi,  很好用的的軟件。推薦,IP局域網(wǎng)穿透。 3389端口還是不能連接,道理同上。
 
3. 改用LoginAny. 免費(fèi)版每月只能遠(yuǎn)程桌面20分鐘,文件傳輸3次。速度超快。 遠(yuǎn)程桌面是LoginAny開發(fā)的,所以不再用3389端口。

自己研究下能否逆向工程下…

———先看文件傳輸功能———–
打開eXeScope分析資源,首先查看文字:"文件傳輸已經(jīng)達(dá)到最大使用次數(shù)!",String Id: 484
得知Dialog: 1218是提示對(duì)話框, Dialog: 1219是文件傳輸Form.

打開OllyICE,反編譯后,
- 搜索4C2(1218), 找提示對(duì)話框的代碼,自己標(biāo)注附近的代碼,這是一個(gè)功能函數(shù)。
搜索4C3(1219), 找文件傳輸Form相關(guān)代碼。
搜索1E4(484), 找"文件傳輸已經(jīng)達(dá)到最大使用次數(shù)!"的相關(guān)代碼。
004938D0  /$  55            push    ebp
004938D1  |.  8BEC          mov     ebp, esp
004938D3  |.  6A FF         push    -1
004938D5  |.  68 87C25B00   push    005BC287                                           ;  SE 處理程序安裝
004938DA  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
004938E0  |.  50            push    eax
004938E1  |.  64:8925 00000>mov     dword ptr fs:[0], esp
004938E8  |.  81EC BC000000 sub     esp, 0BC
004938EE  |.  A1 BCEB6200   mov     eax, dword ptr [62EBBC]
004938F3  |.  33C5          xor     eax, ebp
004938F5  |.  8945 EC       mov     dword ptr [ebp-14], eax
004938F8  |.  898D 40FFFFFF mov     dword ptr [ebp-C0], ecx
004938FE  |.  C785 4CFFFFFF>mov     dword ptr [ebp-B4], 1
00493908  |.  6A 01         push    1
0049390A  |.  8B85 4CFFFFFF mov     eax, dword ptr [ebp-B4]
00493910  |.  50            push    eax
00493911  |.  8B8D 40FFFFFF mov     ecx, dword ptr [ebp-C0]
00493917  |.  E8 D4EFFFFF   call    004928F0                                           ;  關(guān)鍵Call !!!!
0049391C  |.  85C0          test    eax, eax
0049391E  |.  75 05         jnz     short 00493925
00493920  |.  E9 F8000000   jmp     00493A1D
00493925  |>  C785 48FFFFFF>mov     dword ptr [ebp-B8], 0
0049392F  |.  8D4D F0       lea     ecx, dword ptr [ebp-10]
00493932  |.  FF15 28B95C00 call    dword ptr [<&MFC71.#310_ATL::CStringT<char,StrTrai>;  MFC71.7C173199
00493938  |.  C745 FC 00000>mov     dword ptr [ebp-4], 0
0049393F  |.  6A 00         push    0
00493941  |.  8D8D 54FFFFFF lea     ecx, dword ptr [ebp-AC]
00493947  |.  E8 64D30800   call    00520CB0
0049394C  |.  C645 FC 01    mov     byte ptr [ebp-4], 1
00493950  |.  8B8D 4CFFFFFF mov     ecx, dword ptr [ebp-B4]
00493956  |.  51            push    ecx
00493957  |.  68 DD000000   push    0DD
0049395C  |.  8D55 F0       lea     edx, dword ptr [ebp-10]
0049395F  |.  52            push    edx
00493960  |.  8D85 54FFFFFF lea     eax, dword ptr [ebp-AC]
00493966  |.  50            push    eax
00493967  |.  8D8D 48FFFFFF lea     ecx, dword ptr [ebp-B8]
0049396D  |.  51            push    ecx
0049396E  |.  8B8D 40FFFFFF mov     ecx, dword ptr [ebp-C0]
00493974  |.  E8 A7190000   call    00495320                                           ;  MessageBox ….
00493979  |.  85C0          test    eax, eax
0049397B  |.  75 21         jnz     short 0049399E
0049397D  |.  C645 FC 00    mov     byte ptr [ebp-4], 0
00493981  |.  8D8D 54FFFFFF lea     ecx, dword ptr [ebp-AC]
00493987  |.  E8 24D40800   call    00520DB0
0049398C  |.  C745 FC FFFFF>mov     dword ptr [ebp-4], -1
00493993  |.  8D4D F0       lea     ecx, dword ptr [ebp-10]
00493996  |.  FF15 68B95C00 call    dword ptr [<&MFC71.#578_ATL::CStringT<char,StrTrai>;  MFC71.7C1771B1
0049399C  |.  EB 7F         jmp     short 00493A1D
0049399E  |>  8B95 48FFFFFF mov     edx, dword ptr [ebp-B8]
004939A4  |.  52            push    edx
004939A5  |.  68 2CF16200   push    0062F12C
004939AA  |.  51            push    ecx
004939AB  |.  8BCC          mov     ecx, esp
004939AD  |.  89A5 44FFFFFF mov     dword ptr [ebp-BC], esp
004939B3  |.  8D45 F0       lea     eax, dword ptr [ebp-10]
004939B6  |.  50            push    eax
004939B7  |.  FF15 38B95C00 call    dword ptr [<&MFC71.#297_ATL::CStringT<char,StrTrai>;  MFC71.7C14E575
004939BD  |.  8985 3CFFFFFF mov     dword ptr [ebp-C4], eax
004939C3  |.  8D8D 54FFFFFF lea     ecx, dword ptr [ebp-AC]
004939C9  |.  51            push    ecx
004939CA  |.  B9 E4F26200   mov     ecx, 0062F2E4
004939CF  |.  E8 ECDAFCFF   call    004614C0                                           ;  調(diào)用打開文件傳輸Form
004939D4  |.  8985 38FFFFFF mov     dword ptr [ebp-C8], eax
004939DA  |.  8B95 38FFFFFF mov     edx, dword ptr [ebp-C8]
004939E0  |.  8995 50FFFFFF mov     dword ptr [ebp-B0], edx
004939E6  |.  6A 05         push    5
004939E8  |.  8B8D 50FFFFFF mov     ecx, dword ptr [ebp-B0]
004939EE  |.  E8 6DCC1100   call    <jmp.&MFC71.#6090_CWnd::ShowWindow>
004939F3  |.  8B8D 50FFFFFF mov     ecx, dword ptr [ebp-B0]
004939F9  |.  E8 12D8FAFF   call    00441210
004939FE  |.  C645 FC 00    mov     byte ptr [ebp-4], 0
00493A02  |.  8D8D 54FFFFFF lea     ecx, dword ptr [ebp-AC]
00493A08  |.  E8 A3D30800   call    00520DB0
00493A0D  |.  C745 FC FFFFF>mov     dword ptr [ebp-4], -1
00493A14  |.  8D4D F0       lea     ecx, dword ptr [ebp-10]
00493A17  |.  FF15 68B95C00 call    dword ptr [<&MFC71.#578_ATL::CStringT<char,StrTrai>;  MFC71.7C1771B1
00493A1D  |>  8B4D F4       mov     ecx, dword ptr [ebp-C]
00493A20  |.  64:890D 00000>mov     dword ptr fs:[0], ecx
00493A27  |.  8B4D EC       mov     ecx, dword ptr [ebp-14]
00493A2A  |.  33CD          xor     ecx, ebp
00493A2C  |.  E8 5ADE1100   call    005B188B
00493A31  |.  8BE5          mov     esp, ebp
00493A33  |.  5D            pop     ebp
00493A34  \.  C3            retn
 
在0049 3917發(fā)現(xiàn)關(guān)鍵Call.
決定修改其后的跳轉(zhuǎn),
00493920  |.  E9 F8000000   jmp     00493A1D  這一行是跳過調(diào)用打開文件傳輸Form的代碼。
把它改為:
00493920  |.  90 90909090   Nop               什么也不做
經(jīng)試驗(yàn),文件傳輸功能可以超過3次的使用了。

 

 

———遠(yuǎn)程桌面的功能———-


遠(yuǎn)程桌面的功能只能連接20分鐘。 解決辦法還是老一套:
打開eXeScope分析資源,找到對(duì)話框:遠(yuǎn)程桌面,ID=1306.

打開OllyICE,搜索常量1306,很快定位下面代碼:

00493670  /$  55            push    ebp
00493671  |.  8BEC          mov     ebp, esp
00493673  |.  6A FF         push    -1
00493675  |.  68 69C25B00   push    005BC269                                           ;  SE 處理程序安裝
0049367A  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
00493680  |.  50            push    eax
00493681  |.  64:8925 00000>mov     dword ptr fs:[0], esp
00493688  |.  81EC D4000000 sub     esp, 0D4
0049368E  |.  A1 BCEB6200   mov     eax, dword ptr [62EBBC]
00493693  |.  33C5          xor     eax, ebp
00493695  |.  8945 EC       mov     dword ptr [ebp-14], eax
00493698  |.  898D 30FFFFFF mov     dword ptr [ebp-D0], ecx
0049369E  |.  C785 50FFFFFF>mov     dword ptr [ebp-B0], 0
004936A8  |.  6A 01         push    1
004936AA  |.  8B85 50FFFFFF mov     eax, dword ptr [ebp-B0]
004936B0  |.  50            push    eax
004936B1  |.  8B8D 30FFFFFF mov     ecx, dword ptr [ebp-D0]
004936B7  |.  E8 34F2FFFF   call    004928F0                                           ;  關(guān)鍵Call–remote desk.
004936BC  |.  85C0          test    eax, eax
004936BE  |.  75 05         jnz     short 004936C5
004936C0  |.  E9 F0010000   jmp     004938B5
004936C5  |>  C785 4CFFFFFF>mov     dword ptr [ebp-B4], 0
004936CF  |.  6A 00         push    0
004936D1  |.  8D8D 54FFFFFF lea     ecx, dword ptr [ebp-AC]
004936D7  |.  E8 D4D50800   call    00520CB0
004936DC  |.  C745 FC 00000>mov     dword ptr [ebp-4], 0
004936E3  |.  8D4D F0       lea     ecx, dword ptr [ebp-10]
004936E6  |.  FF15 28B95C00 call    dword ptr [<&MFC71.#310_ATL::CStringT<char,StrTrai>;  MFC71.7C173199
004936EC  |.  C645 FC 01    mov     byte ptr [ebp-4], 1
004936F0  |.  8B8D 50FFFFFF mov     ecx, dword ptr [ebp-B0]
004936F6  |.  51            push    ecx
004936F7  |.  68 19010000   push    119
004936FC  |.  8D55 F0       lea     edx, dword ptr [ebp-10]
004936FF  |.  52            push    edx
00493700  |.  8D85 54FFFFFF lea     eax, dword ptr [ebp-AC]
00493706  |.  50            push    eax
00493707  |.  8D8D 4CFFFFFF lea     ecx, dword ptr [ebp-B4]
0049370D  |.  51            push    ecx
0049370E  |.  8B8D 30FFFFFF mov     ecx, dword ptr [ebp-D0]
00493714  |.  E8 071C0000   call    00495320                                           ;  消息處理
00493719  |.  85C0          test    eax, eax
0049371B  |.  75 24         jnz     short 00493741
0049371D  |.  C645 FC 00    mov     byte ptr [ebp-4], 0
00493721  |.  8D4D F0       lea     ecx, dword ptr [ebp-10]
00493724  |.  FF15 68B95C00 call    dword ptr [<&MFC71.#578_ATL::CStringT<char,StrTrai>;  MFC71.7C1771B1
0049372A  |.  C745 FC FFFFF>mov     dword ptr [ebp-4], -1
00493731  |.  8D8D 54FFFFFF lea     ecx, dword ptr [ebp-AC]
00493737  |.  E8 74D60800   call    00520DB0                                           ;  字符處理
0049373C  |.  E9 74010000   jmp     004938B5
00493741  |>  817D A4 01030>cmp     dword ptr [ebp-5C], 90301
00493748  |.  0F83 E8000000 jnb     00493836
0049374E  |.  8B95 4CFFFFFF mov     edx, dword ptr [ebp-B4]
00493754  |.  52            push    edx
00493755  |.  6A 00         push    0
00493757  |.  51            push    ecx
00493758  |.  8BCC          mov     ecx, esp
0049375A  |.  89A5 38FFFFFF mov     dword ptr [ebp-C8], esp
00493760  |.  8D45 F0       lea     eax, dword ptr [ebp-10]
00493763  |.  50            push    eax
00493764  |.  FF15 38B95C00 call    dword ptr [<&MFC71.#297_ATL::CStringT<char,StrTrai>;  MFC71.7C14E575
0049376A  |.  8985 2CFFFFFF mov     dword ptr [ebp-D4], eax
00493770  |.  8D8D 54FFFFFF lea     ecx, dword ptr [ebp-AC]
00493776  |.  51            push    ecx
00493777  |.  B9 E4F26200   mov     ecx, 0062F2E4
0049377C  |.  E8 BFD7FCFF   call    00460F40                                           ;  ???? XX new opeator
00493781  |.  8985 28FFFFFF mov     dword ptr [ebp-D8], eax
00493787  |.  8B95 28FFFFFF mov     edx, dword ptr [ebp-D8]
0049378D  |.  8995 48FFFFFF mov     dword ptr [ebp-B8], edx
00493793  |.  83BD 48FFFFFF>cmp     dword ptr [ebp-B8], 0
0049379A  |.  0F85 94000000 jnz     00493834
004937A0  |.  8D8D 40FFFFFF lea     ecx, dword ptr [ebp-C0]
004937A6  |.  FF15 28B95C00 call    dword ptr [<&MFC71.#310_ATL::CStringT<char,StrTrai>;  MFC71.7C173199
004937AC  |.  C645 FC 02    mov     byte ptr [ebp-4], 2
004937B0  |.  8D8D 44FFFFFF lea     ecx, dword ptr [ebp-BC]
004937B6  |.  FF15 28B95C00 call    dword ptr [<&MFC71.#310_ATL::CStringT<char,StrTrai>;  MFC71.7C173199
004937BC  |.  C645 FC 03    mov     byte ptr [ebp-4], 3
004937C0  |.  FF15 90AA5C00 call    dword ptr [<&KERNEL32.GetLastError>]               ; [GetLastError
004937C6  |.  50            push    eax
004937C7  |.  68 42010000   push    142
004937CC  |.  8D85 44FFFFFF lea     eax, dword ptr [ebp-BC]
004937D2  |.  50            push    eax
004937D3  |.  FF15 3CB95C00 call    dword ptr [<&MFC71.#2321_ATL::CStringT<char,StrTra>;  MFC71.7C18B260
004937D9  |.  83C4 0C       add     esp, 0C
004937DC  |.  68 00E00000   push    0E000
004937E1  |.  8D8D 40FFFFFF lea     ecx, dword ptr [ebp-C0]
004937E7  |.  FF15 2CB95C00 call    dword ptr [<&MFC71.#4035_ATL::CStringT<char,StrTra>;  MFC71.7C153789
004937ED  |.  6A 40         push    40
004937EF  |.  8D8D 40FFFFFF lea     ecx, dword ptr [ebp-C0]
004937F5  |.  FF15 30B95C00 call    dword ptr [<&MFC71.#876_ATL::CSimpleStringT<char,1>;  MFC71.7C158BCD
004937FB  |.  50            push    eax
004937FC  |.  8D8D 44FFFFFF lea     ecx, dword ptr [ebp-BC]
00493802  |.  FF15 30B95C00 call    dword ptr [<&MFC71.#876_ATL::CSimpleStringT<char,1>;  MFC71.7C158BCD
00493808  |.  50            push    eax
00493809  |.  8B8D 30FFFFFF mov     ecx, dword ptr [ebp-D0]
0049380F  |.  E8 5ECE1100   call    <jmp.&MFC71.#4104_CWnd::MessageBoxA>
00493814  |.  C645 FC 02    mov     byte ptr [ebp-4], 2
00493818  |.  8D8D 44FFFFFF lea     ecx, dword ptr [ebp-BC]
0049381E  |.  FF15 68B95C00 call    dword ptr [<&MFC71.#578_ATL::CStringT<char,StrTrai>;  MFC71.7C1771B1
00493824  |.  C645 FC 01    mov     byte ptr [ebp-4], 1
00493828  |.  8D8D 40FFFFFF lea     ecx, dword ptr [ebp-C0]
0049382E  |.  FF15 68B95C00 call    dword ptr [<&MFC71.#578_ATL::CStringT<char,StrTrai>;  MFC71.7C1771B1
00493834  |>  EB 60         jmp     short 00493896                                     ;  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
00493836  |>  8B8D 4CFFFFFF mov     ecx, dword ptr [ebp-B4]
0049383C  |.  51            push    ecx
0049383D  |.  68 2CF16200   push    0062F12C
00493842  |.  51            push    ecx
00493843  |.  8BCC          mov     ecx, esp
00493845  |.  89A5 34FFFFFF mov     dword ptr [ebp-CC], esp
0049384B  |.  8D55 F0       lea     edx, dword ptr [ebp-10]
0049384E  |.  52            push    edx
0049384F  |.  FF15 38B95C00 call    dword ptr [<&MFC71.#297_ATL::CStringT<char,StrTrai>;  MFC71.7C14E575
00493855  |.  8985 24FFFFFF mov     dword ptr [ebp-DC], eax
0049385B  |.  8D85 54FFFFFF lea     eax, dword ptr [ebp-AC]
00493861  |.  50            push    eax
00493862  |.  B9 E4F26200   mov     ecx, 0062F2E4
00493867  |.  E8 74D9FCFF   call    004611E0                                           ;  調(diào)用1:遠(yuǎn)程桌面的Form
0049386C  |.  8985 20FFFFFF mov     dword ptr [ebp-E0], eax
00493872  |.  8B8D 20FFFFFF mov     ecx, dword ptr [ebp-E0]
00493878  |.  898D 3CFFFFFF mov     dword ptr [ebp-C4], ecx
0049387E  |.  6A 05         push    5
00493880  |.  8B8D 3CFFFFFF mov     ecx, dword ptr [ebp-C4]
00493886  |.  E8 D5CD1100   call    <jmp.&MFC71.#6090_CWnd::ShowWindow>
0049388B  |.  8B8D 3CFFFFFF mov     ecx, dword ptr [ebp-C4]
00493891  |.  E8 1A72F9FF   call    0042AAB0
00493896  |>  C645 FC 00    mov     byte ptr [ebp-4], 0
0049389A  |.  8D4D F0       lea     ecx, dword ptr [ebp-10]
0049389D  |.  FF15 68B95C00 call    dword ptr [<&MFC71.#578_ATL::CStringT<char,StrTrai>;  MFC71.7C1771B1
004938A3  |.  C745 FC FFFFF>mov     dword ptr [ebp-4], -1
004938AA  |.  8D8D 54FFFFFF lea     ecx, dword ptr [ebp-AC]
004938B0  |.  E8 FBD40800   call    00520DB0
004938B5  |>  8B4D F4       mov     ecx, dword ptr [ebp-C]
004938B8  |.  64:890D 00000>mov     dword ptr fs:[0], ecx
004938BF  |.  8B4D EC       mov     ecx, dword ptr [ebp-14]
004938C2  |.  33CD          xor     ecx, ebp
004938C4  |.  E8 C2DF1100   call    005B188B
004938C9  |.  8BE5          mov     esp, ebp
004938CB  |.  5D            pop     ebp
004938CC  \.  C3            retn

找到關(guān)鍵Call.
004936B7  |.  E8 34F2FFFF   call    004928F0    ;  關(guān)鍵Call–remote desk.

修改關(guān)鍵call之后的跳轉(zhuǎn):

004936C0  |.  E9 F0010000   jmp     004938B5
修改為什么都不作。免得它影響后面的代碼。
用9090909090 填充。

經(jīng)試驗(yàn),遠(yuǎn)程桌面功能可以超過20分鐘的使用了。

實(shí)際摸索中還是走了不少彎路,總結(jié)經(jīng)驗(yàn)為:在OllyDbg中,看過的弄明白的函數(shù),要自己加上注釋。 在看其他相關(guān)的代碼的時(shí)候,極有可能就碰到了自己曾經(jīng)注釋過的代碼,這樣一下子就全通了。



]]>
MyEclipse 無響應(yīng)的幾種解決辦法http://www.aygfsteel.com/gf7/archive/2011/07/17/354470.html風(fēng)風(fēng)Sun, 17 Jul 2011 02:03:00 GMThttp://www.aygfsteel.com/gf7/archive/2011/07/17/354470.htmlhttp://www.aygfsteel.com/gf7/comments/354470.htmlhttp://www.aygfsteel.com/gf7/archive/2011/07/17/354470.html#Feedback0http://www.aygfsteel.com/gf7/comments/commentRss/354470.htmlhttp://www.aygfsteel.com/gf7/services/trackbacks/354470.html

Eclipse MyEclipse 沒有響應(yīng) JVM terminated. Exit code=1073807364 錯(cuò)誤 卡住 等怪問題怪現(xiàn)象[解決辦法]


問題描述:


                     Eclipse的WTP和MyEclipse都會(huì)的怪毛病

                     在WTP或者M(jìn)yEclipse下 在JSP頁面中<% 和 %>之間寫代碼(即寫:scriptlet代碼)

                     只要輸入.號(hào) 整個(gè)IDE就卡住了 比如: out. 這個(gè)后面要出來要卡好一會(huì)

                      強(qiáng)行關(guān)閉出現(xiàn)以下提示:

                     JVM terminated. Exit code=1073807364
                     c:\WINDOWS\system32\javaw.exe
                     -Xms40m
                     -Xmx256m
                     -jar F:\eclipse\startup.jar
                     -os win32
                     -ws win32
                     -arch x86
                     -launcher F:\eclipse\eclipse.exe
                     -name Eclipse
                     -showsplash 600
                     -exitdata f24_7c
                     -vm c:\WINDOWS\system32\javaw.exe
                     -vmargs
                     -Xms40m
                     -Xmx256m
                     -jar F:\eclipse\startup.jar

這個(gè)問題 讓我郁悶了好幾天 雖然在JSP中scriptlet的腳本是禁忌 但是有時(shí)候?yàn)榱朔奖銣y(cè)試代碼效果 還是會(huì)偶爾用用

經(jīng)過這次 總結(jié)了一下

解決辦法:
(感謝Matrix論壇幾位朋友的幫助)

1:    ①:
                在Eclipse——Window——Preferences——Java——Installed JREs下
                添加你機(jī)子上的1.5+的JDK路徑 添加好后把舊版本的Remove 這樣下次新建工程就不用改了 一勞永逸!

          或者:

          ②:
                請(qǐng)將新建WEB工程的JRE 1.42的包remove掉,自己新建一個(gè)你機(jī)子上的1.5+的JDK目錄下的jre的包
                要導(dǎo)入的jre路徑包括:
                D:\Program Files\Java\jdk1.5.0_06\jre\lib下的 *.jar;以及
                D:\Program Files\Java\jdk1.5.0_06\jre\lib\ext下的*.jar.
                (這個(gè)問題其實(shí)只這一步就能解決了,謝謝yiqingxiao的提醒)

2: 在eclipse的安裝目錄下用EditPlus編輯eclipse.ini文件,將其中的參數(shù)改成:

         -vm=D:\Program Files\Java\jdk1.5.0_06\bin\javaw.exe #這個(gè)看你自己JDK路徑而定
         -vmargs                 #下面參數(shù)視大家內(nèi)存大小 自己選擇合適的大小
         -Xms128m
         -Xmx512m
         -XX:PermSize=64M
         -XX:MaxPermSize=128M

3: 裝過orcale的人 最好把環(huán)境變量重新設(shè)置一下:set path=D:\Program Files\Java\jdk1.5.0_06\bin

4: eclipse是3.3的,單獨(dú)運(yùn)行沒什么問題,裝上myeclipse6之后編寫jsp代碼時(shí)聯(lián)想輸入的時(shí)候就會(huì)出現(xiàn)eclipse無響應(yīng)的情況,大概1分鐘左右才能恢復(fù),搜了半天也沒有個(gè)好答案。自己琢磨,用了下面這個(gè)辦法,好了,不知為什么。菜單-->myeclipse-->myeclipse-->files and editors-->html-->visual designer

        取消mozilla/firefox和sarari還有show warning......(Linux only)這三個(gè)選項(xiàng)。就好了,你們實(shí)驗(yàn)看看。




]]>
java.sql.SQLException: No more data to read from sockethttp://www.aygfsteel.com/gf7/archive/2011/03/12/346127.html風(fēng)風(fēng)Sat, 12 Mar 2011 08:21:00 GMThttp://www.aygfsteel.com/gf7/archive/2011/03/12/346127.htmlhttp://www.aygfsteel.com/gf7/comments/346127.htmlhttp://www.aygfsteel.com/gf7/archive/2011/03/12/346127.html#Feedback0http://www.aygfsteel.com/gf7/comments/commentRss/346127.htmlhttp://www.aygfsteel.com/gf7/services/trackbacks/346127.html            Driver Version: 9i.*    or 10g.*

           該異常通常是因?yàn)槭褂昧诉B接池,當(dāng)從連接池取得的connection失效或者超時(shí)的時(shí)候,使用這個(gè)連接來進(jìn)行數(shù)據(jù)庫操作就會(huì)拋出以上異常。
           解決方法就是讓數(shù)據(jù)庫連接池在給你返回connection之前,檢查該connnection是否超時(shí)或者失效,如果是,則evict這個(gè)connection,并返回一個(gè)可用的connection。
           以DBCP為例,做如下配置即可解決問題:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="url">
   <value>${jdbc.url}</value>
  </property>
  <property name="driverClassName">
   <value>${jdbc.driver}</value>
  </property>
  <property name="username">
   <value>${jdbc.username}</value>
  </property>
  <property name="password">
   <value>${jdbc.password}</value>
  </property>
  <property name="testOnBorrow">
   <value>true</value>
  </property>
  <property name="testOnReturn">
   <value>true</value>
  </property>
  <property name="testWhileIdle">
   <value>true</value>
  </property>
  <property name="minEvictableIdleTimeMillis">
   <value>180000</value>
  </property>
  <property name="timeBetweenEvictionRunsMillis">
   <value>360000</value>
  </property>
  <property name="validationQuery">
   <value>SELECT 1 FROM SYS.DUAL</value>
  </property>
  <property name="maxActive">
   <value>100</value>
  </property>
</bean>
          另外,你也可以參考這里:http://www.websina.com/bugzero/errors/oracle-SQLException.html
          轉(zhuǎn)貼: Oracle SQLException: No more data to read from socket
java.sql.SQLException: No more data to read from socket at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1160)
at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine.java:963)
at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine.java:893)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:375)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1894)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1094)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2132)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2015)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2877)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:608)

This error most likely occurs in applications that use a database connections pool. When the application checked out a connection that has been timed out or has been staled, and used it to connect to the database, this error occurs.
You may need start your Oracle database server as well as your Java application. In a better designed system, however, the staled connection should be cleared out and a new connection should be establised automatically.
--------------------------------------------------
          2-ORA-17004: Invalid column type  (java.sql.SQLException: 列の型が無効です。)         Driver Version: 9i.*

          該異常初次出現(xiàn)在使用spring+iBatis的程序中,后來通過檢查出現(xiàn)錯(cuò)誤的字段和SQLMAP的參考文檔,才發(fā)現(xiàn)問題之所在。
          如果你使用iBatis,那從他的SqlMap參考文檔中應(yīng)該找到以下文字,當(dāng)你看到他們的時(shí)候,你就發(fā)現(xiàn)了通向成功之門的鑰匙,呵呵
          Note! Most drivers only need the type specified for nullable columns.  Therefore, for such drivers you only
need to specify the type for the columns that are nullable. 
          Note! When using an Oracle driver, you will get an “Invalid column type” error if you attempt to set a null
value to a column without specifying its type. 
          也就是說,當(dāng)某個(gè)column允許為空,而你傳的參數(shù)對(duì)應(yīng)該column的值也為null的時(shí)候,對(duì)于oracle的驅(qū)動(dòng)來說,這個(gè)異常是鐵定的了。

          解決方法,可以通過iBatis的parameterMap,指定parameter元素的jdbcType和nullValue來解決;如果你沒有使用iBatis,那你可以通過檢查參數(shù),如果他對(duì)應(yīng)的列為可以為空,而當(dāng)前值恰好就是空的時(shí)候,為他設(shè)置一個(gè)不是空的值即可。
--------------------------------------------------
           3-java.sql.SQLException: OALL8矛盾した狀態(tài)にあります;(java.sql.SQLException: OALL8 is in an inconsistent state.)

           該異常在我們的程序中通常是在第一個(gè)異常出現(xiàn)之后出現(xiàn),但也不盡然,該異常搜遍網(wǎng)上也找不到合理的解釋,只有以下信息可能會(huì)有用一些(from   http://forums.oracle.com/forums/thread.jspa?messageID=1275383):
This is known to occur under when you are using too big an array size. How big your array can be depends on the length of each record and the Driver/Database combination. If you exceed the maximum size you will get the "OALL8" SQLException and your connection object may become unusable.

This message is also created if you are using the following:

9.0.1 Database
10.1.0 JDBC Driver
Generated Code that passes in an ARRAY or VARRAY of VARCHAR2 as a Parameter

            或者(from http://opensource.atlassian.com/projects/spring/browse/SPR-1545?decorator=none&view=rss):
[SPR-1545] Oracle error 17447 should result in a DataAccessResourceFailureException
Oracle error 17447 is currently an unmapped exception but it should be a DataAccessResourceFailureException.  This error occurs when a JDBC connection has become corrupted, usually because of failure to properly close a connection before returning the connection to the connection pool.  Here is the error message:

SQL state [null]; error code [17447]; OALL8 is in an inconsistent state; nested exception is java.sql.SQLException: OALL8 is in an inconsistent state
    java.sql.SQLException: OALL8 is in an inconsistent state

This is a kind of "oh crap, something bad happened and it's not really your fault" exception in Oracle.  A few causes of this message are suggested in my searches on Google, including (see http://forums.oracle.com/forums/thread.jspa?threadID=274018&tstart=0):
- use of Oracle 10g JDBC drivers to connect to Oracle 9 databases
- using too big an array size (9.0.1 Database, 10.1.0 JDBC Driver and Generated Code that passes in an ARRAY or VARRAY of VARCHAR2 as a Parameter )

In any case, after this exception is thrown the connection is corrupted and unusable, hence why I advocate this exception be mapped to a DataAccessResourceFailureException

            解決方法,我也不知道,呵呵,反正調(diào)整了第一個(gè)問題之后,這個(gè)異常再?zèng)]有在我們的程序中出現(xiàn)。

]]>
主站蜘蛛池模板: 灵宝市| 弥渡县| 瑞金市| 济宁市| 龙井市| 积石山| 镇康县| 六盘水市| 射洪县| 天峨县| 凤阳县| 图们市| 通渭县| 罗城| 通山县| 长岭县| 祥云县| 山西省| 永年县| 邹平县| 汾西县| 临武县| 白河县| 龙海市| 那坡县| 沙坪坝区| 齐齐哈尔市| 阳曲县| 甘南县| 乌鲁木齐县| 丹阳市| 呼玛县| 峡江县| 天峨县| 鹿邑县| 老河口市| 长春市| 呼玛县| 嘉义市| 鲁甸县| 柳州市|