日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java统计多个线程的请求次数_Web并发页面访问量统计实现

發布時間:2025/4/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java统计多个线程的请求次数_Web并发页面访问量统计实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

頁面訪問量統計,可能在上學的時候就講過如何簡單實現,例如在servletContext中保存一個頁頁面訪問次數,然后每訪問一次加1;或者每訪問一次就把操作記錄保存到數據庫,這樣的處理方式,做做實驗就算了,在實際應用中這樣應用對系統性能影響特別大。

第一種方式,因為頁面訪問次數屬于一個公共變量,在對公共變量進行修改的時候,往往需要加上同步鎖;同步鎖會導致訪問速度明顯變慢;第二種方式也一樣,而且頻繁訪問數據庫也不是一種合理的方式。

前不久,我一個朋友要我幫他們寫一個簡單的頁面統計代碼。1、需求是保存頁面訪問IP、時間、以及其他一些可用的信息,以后需要保存的訪問信息可擴展 2、不能影響當前的訪問速度 3、能支持一定量的并發訪問

接到朋友給的這個需求,我想到了一下幾點:1、如何篩選我們需要統計的頁面;2、需要將訪問和統計分離,不在訪問的線程中來保存訪問信息,另外起一個線程將訪問信息保存到數據庫;3、可以使用一個公共的隊列來保存這個訪問信息;4、可以批量的保存一定量的訪問信息

解決方案:

1、針對第一個問題,我給出了兩個方法。1、使用一個集合保存所有的需要統計的頁面,然后再在Filter里面判斷當前請求是否在在統計之列;2、在JSP頁面中引入一段公共代碼,在代碼中使用類似這種CounterUtils.addCounter(request);這種方法有一個好處,維護需要統計的頁面比較方便,而且感覺上更加高效,不需要Filter攔截。但是朋友堅決用第一種方式,也是沒有辦法。

2、每訪問一次,我們將需要保存的信息保存成一個對象,然后放入到隊列當中,然后另起一個線程定期進行保存。

于是我就寫了一個簡單的demo給朋友,沒過多久,就被退貨了。經過測試并發還沒到200就突然不保存數據庫了,訪問也變得特慢,最后竟然堆內存溢出了。

沒有辦法只能再在本機用loadRunner進行測試,同時通過jconsole java自帶工具來檢測內存變化情況。測試情況與朋友說的一樣,剛開始能夠正常運行,當并發達到一定量,就開始出現保存緩慢,最后不知道怎么整的保存線程不再運行,就這樣隊列越來越大,自然堆內存大到溢出了。

從上面的情況也可以想到,一個隊列有可能無法支持這么大的并發訪問,于是就想使用多個隊列來進行保存,使用類似分表分庫的方法,將不同請求分配到不同的隊列中去,于是就變成了下面這種方式:

部分代碼如下:(尾部有相關源碼獲取方式)1、初始化生成linkedList集合列表

將請求封裝成統計所需對象

3、輪詢LinkedList隊列集合

4、ExecuteThread線程用于批量保存訪問日志

// 批量保存數據庫

這個分兩種方式

1、保存詳細的訪問記錄,例如,某某時候某個IP對某個頁面進行了訪問

2、只保存某天每個頁面訪問的總數

對于第一種方式,使用批量保存即可。對于第二種方式可以使用一個hashTable來維護所有頁面某個時間段內的對應頁面的訪問增量,具體維護方式可以如下:

將reqestStc信息維護進HashTable當中,其中維護過程省略;再寫一個定時器,定時將HashTable中的增量數據flush到數據庫中;

5、如何攔截需要統計的訪問請求方法一:通過判斷uri是否在需要統計之列方法二:在需要統計的jsp中添加JAVA代碼例如:CounterUtils.addCounter(request);

方法三:JS異步訪問,類似百度統計的這種方式,這種方式有個好處,就是不影響頁面加載速度。

經過修改,在loadRunner和tomcat的測試下,基本上能夠達到tomcat最大的并發以上用戶,并且占用少量資源。

還有一種方式就是百度統計那種方式,在js端使用異步統計代碼,這樣做的好處是不影響頁面的加載速度,代碼如下圖,具體實現沒有去深究:

(轉:http://blog.csdn.net/wushuchu/article/details/52036753)

公眾號回復"page"獲取相關源碼

總結

以上是生活随笔為你收集整理的java统计多个线程的请求次数_Web并发页面访问量统计实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。