国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java page cache回寫機制案例詳解

Java page cache回寫機制案例詳解

2021-12-28 00:54JAVA探索 Java教程

這篇文章主要介紹了Java page cache回寫機制案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

JAVA寫文件的基本流程

在不使用堆外內存的情況下,java在寫文件時,先將字節寫入JVM的堆內內存中;然后調用jvm的寫文件函數,將字節寫入jvm的堆外內存中,jvm再調用系統內核的寫文件函數,將字節寫入內核的heap中;然后內核將字節寫入page cache中,將page cache狀態改為dirty,根據page cache的回寫機制在合適的時機將字節寫入磁盤。

Java page cache回寫機制案例詳解

 

page cache 自動回寫機制

page cache的回寫時機由系統配置/etc/sysctl.conf中的幾個參數決定,分別是:

  • dirty_background_bytes

默認值:0 表示不啟用

當臟頁所占的內存大小超過dirty_background_bytes時,內核的pdflush線程會從后臺開始回寫臟頁,不會影響應用程序的后序IO操作。

  • dirty_background_ratio

默認值 :10

參數意義:當臟頁所占的百分比(相對于所有可用內存,即空閑內存頁+可回收內存頁)達到dirty_background_ratio時內核的pdflush線程從后臺開始回寫臟頁,不會影響應用程序的后序IO操作。增大會使用更多內存用于緩沖,可以提高系統的讀寫性能。當需要持續、恒定的寫入場合時,應該降低該數值。

注意:dirty_background_bytes參數和dirty_background_ratio參數是相對的,只能指定其中一個。當其中一個參數文件被寫入時,會立即開始計算臟頁限制,并且會將另一個參數的值清零。

  • dirty_bytes

默認值:0 表示不啟用

當臟頁所占的內存數量達到dirty_bytes時,內核將臟頁中的數據刷入磁盤并阻塞后序的IO操作。

注意:dirty_bytes參數和dirty_ratio參數是相對的,只能指定其中一個。當其中一個參數文件被寫入時,會立即開始計算臟頁限制,并且會將另一個參數的值清零

  • dirty_ratio

默認值:20

參數意義:當臟頁所占的百分比(相對于所有可用內存,即空閑內存頁+可回收內存頁)達到dirty_ratio時,內核將臟頁中的數據刷入磁盤并阻塞后序的IO操作。

  • dirty_background_ratio與dirty_ratio比較

dirty_ratio是屬于強制性的回寫,也就是說當一個內存區的臟頁達到這個比例時就會觸發內核內存管理把臟頁強制回寫的流程,但dirty_background_ratio是屬于軟性的行為,因為這是透過pdflush內核線程進行的流程,可以在后臺執行對這些臟頁面回寫,并不會因此影響到當下正在執行中的過程。 所以看Linux內核中預設的比例是臟頁達到5%的比例時就會先透過pdflush內核線程進行回寫,當臟頁達到10%比例時,就等于是一個很嚴重的狀況,此時就會在平衡臟頁面流程中觸發強制的回寫,讓系統可以回復到原本預設合理的狀態。

  • dirty_expire_centisecs

默認值:3000

參數意義:用來指定臟數據能存活的時間。指定的值是按100算做一秒計算。只有當超過這個值后,才會被內核進程pdflush寫到磁盤。

  • dirty_writeback_centisecs

默認值:500

參數意義:pdflush回寫的頻率,每次的喚醒的間隔,是以數字100算做1秒。如果將這項值設為500就相當5秒喚醒pdflush進程。如果將這項值設為0就表示完全禁止定期回寫數據。

  • drop_caches

向/proc/sys/vm/drop_caches文件中寫入數值可以使內核釋放page cache,dentries和inodes緩存所占的內存。

只釋放pagecache:

echo 1 > /proc/sys/vm/drop_caches

只釋放dentries和inodes緩存:

echo 2 > /proc/sys/vm/drop_caches

釋放pagecache、dentries和inodes緩存:

echo 3 > /proc/sys/vm/drop_caches

這個操作不是破壞性操作,臟的對象(比如臟頁)不會被釋放,因此要首先運行sync命令。

注:這個只能是手動釋放

 

測試

采用javaBIO不斷向一個文件寫入數據,通過pcstat觀察page cache的大小。文件初始狀態:

[root@node01 ~]# ll test.txt && pcstat test.txt 
-rw-r--r--. 1 root root 0 Aug  1 19:58 test.txt
+----------+----------------+------------+-----------+---------+
| Name     | Size (bytes)   | Pages      | Cached    | Percent |
|----------+----------------+------------+-----------+---------|
| test.txt | 0              | 0          | 0         |     NaN |
+----------+----------------+------------+-----------+---------+

dirty_background_bytes測試

將臟頁閾值設置為10MB,臟頁存活時間設置為5000s,當臟頁大小不足10MB時,絕對不會被刷入磁盤,當臟頁大小超過10MB,但是存活時間不超過5000s時,滿足dirty_background_bytes的條件,被刷入磁盤。

#修改系統配置
[root@node01 ~]# vi /etc/sysctl.conf
...
#便于測試,設為10485760  10mb 
vm.dirty_background_bytes = 10485760
#便于測試,設為104857600  100mb 
vm.dirty_bytes = 104857600
#便于測試,設為500000  5000s
vm.dirty_writeback_centisecs = 500000
#便于測試,設為30000 5min
vm.dirty_expire_centisecs = 30000

#加載系統配置
[root@node01 ~]# sysctl -p

當page cache大小超過10mb前,停止寫入,關閉電源,重啟設備。

關機前page cache狀態及文件大小。

[root@node01 ~]# ll -h test.txt && pcstat test.txt 
-rw-r--r--. 1 root root 1.7K Aug  1 20:20 test.txt
+----------+----------------+------------+-----------+---------+
| Name     | Size (bytes)   | Pages      | Cached    | Percent |
|----------+----------------+------------+-----------+---------|
| test.txt | 1660           | 1          | 1         | 100.000 |
+----------+----------------+------------+-----------+---------+

掐斷電源,重啟。(注意,這里不能按正常流程重啟電源)

重啟后page cache狀態及文件大小。

[root@node01 ~]# ll -h test.txt && pcstat test.txt 
-rw-r--r--. 1 root root 0 Aug  1 20:20 test.txt
+----------+----------------+------------+-----------+---------+
| Name     | Size (bytes)   | Pages      | Cached    | Percent |
|----------+----------------+------------+-----------+---------|
| test.txt | 0              | 0          | 0         |     NaN |
+----------+----------------+------------+-----------+---------+

之前寫入的數據全部丟失,由于沒有達到后臺自動刷入磁盤的閾值(dirty_background_bytes),page cache內的數據丟失。

當page cache大小超過10mb后,停止寫入,關閉電源,重啟設備。

關機前page cache狀態及文件大小。

[root@node01 ~]# ll -h test.txt && pcstat test.txt 
-rw-r--r--. 1 root root 37M Aug  1 20:26 test.txt
+----------+----------------+------------+-----------+---------+
| Name     | Size (bytes)   | Pages      | Cached    | Percent |
|----------+----------------+------------+-----------+---------|
| test.txt | 37985420       | 9274       | 9274      | 100.000 |
+----------+----------------+------------+-----------+---------+

掐斷電源,重啟。(注意,這里不能按正常流程重啟電源)

重啟后page cache狀態及文件大小。

[root@node01 ~]#  ll -h test.txt && pcstat test.txt 
-rw-r--r--. 1 root root 30M Aug  1 20:26 test.txt
+----------+----------------+------------+-----------+---------+
| Name     | Size (bytes)   | Pages      | Cached    | Percent |
|----------+----------------+------------+-----------+---------|
| test.txt | 31035392       | 7577       | 0         | 000.000 |
+----------+----------------+------------+-----------+---------+

之前寫入的數據部分丟失,每次達到后臺自動刷入磁盤的閾值(dirty_background_bytes)時內核都會進行一次刷入操作,而沒有達到閾值的部分就會丟失。關機前37M,關機后30M,自動刷入閾值設置為10M,37-10=7M,這7M數據沒有被刷入磁盤,重啟后丟失。

dirty_expire_centisecs測試

將臟頁閾值設置為100MB,檢測頻率設置為1s,臟頁存活時間設置為15s。這樣可以達到這樣一個測試目的,當我的page cache大小未到達100MB時,由于超過了存活時間15s,檢測的又很及時,幾乎可以被全部刷入磁盤。為什么說幾乎呢?因為不管怎么樣,靠檢測頻率自動刷入機制終究會丟失檢測真空期的數據。臟頁在每次刷入磁盤后重寫前都是干凈的狀態。

#修改系統配置
[root@node01 ~]# vi /etc/sysctl.conf
...
#便于測試,設為104857600  100mb 
vm.dirty_background_bytes = 104857600
#便于測試,設為104857600  100mb 
vm.dirty_bytes = 104857600
#便于測試,設為1500  15s
vm.dirty_writeback_centisecs = 1500
#便于測試,設為100 1s
vm.dirty_expire_centisecs = 100

#加載系統配置
[root@node01 ~]# sysctl -p

當page cache大小超過100mb前,停止寫入,未超過15s,關閉電源,重啟設備。

關機前page cache狀態及文件大小。

-rw-r--r--. 1 root root 150 Aug  1 20:44 test.txt
+----------+----------------+------------+-----------+---------+
| Name     | Size (bytes)   | Pages      | Cached    | Percent |
|----------+----------------+------------+-----------+---------|
| test.txt | 150            | 1          | 1         | 100.000 |
+----------+----------------+------------+-----------+---------+

掐斷電源,重啟。(注意,這里不能按正常流程重啟電源)

重啟后page cache狀態及文件大小。

[root@node01 ~]# ll -h test.txt && pcstat test.txt 
-rw-r--r--. 1 root root 0 Aug  1 20:44 test.txt
+----------+----------------+------------+-----------+---------+
| Name     | Size (bytes)   | Pages      | Cached    | Percent |
|----------+----------------+------------+-----------+---------|
| test.txt | 0              | 0          | 0         |     NaN |
+----------+----------------+------------+-----------+---------+

之前寫入的數據全部丟失,由于沒有超過臟頁存活時間,page cache內的數據丟失。

當page cache存活超過15s后,關閉電源,重啟設備。

關機前page cache狀態及文件大小。

[root@node01 ~]# ll -h test.txt && pcstat test.txt 
-rw-r--r--. 1 root root 1.7K Aug  1 20:48 test.txt
+----------+----------------+------------+-----------+---------+
| Name     | Size (bytes)   | Pages      | Cached    | Percent |
|----------+----------------+------------+-----------+---------|
| test.txt | 1680           | 1          | 1         | 100.000 |
+----------+----------------+------------+-----------+---------+

掐斷電源,重啟。(注意,這里不能按正常流程重啟電源)

重啟后page cache狀態及文件大小。

[root@node01 ~]# ll -h test.txt && pcstat test.txt 
-rw-r--r--. 1 root root 1.7K Aug  1 20:48 test.txt
+----------+----------------+------------+-----------+---------+
| Name     | Size (bytes)   | Pages      | Cached    | Percent |
|----------+----------------+------------+-----------+---------|
| test.txt | 1680           | 1          | 1         | 100.000 |
+----------+----------------+------------+-----------+---------+

超過15s且被檢測到的數據全部保留

dirty_writeback_centisecs測試

將臟頁閾值設置為100MB,檢測頻率設置為15s,臟頁存活時間設置為1s。這樣可以達到這樣一個測試目的,當我的page cache大小未到達100MB時,且超過了存活時間1s,由于檢測的不及時,導致超過存活時間的數據還是沒有被刷入磁盤。

#修改系統配置
[root@node01 ~]# vi /etc/sysctl.conf
...
#便于測試,設為104857600  100mb 
vm.dirty_background_bytes = 104857600
#便于測試,設為104857600  100mb 
vm.dirty_bytes = 104857600
#便于測試,設為100  1s
vm.dirty_writeback_centisecs = 100
#便于測試,設為1500 15s
vm.dirty_expire_centisecs = 1500

#加載系統配置
[root@node01 ~]# sysctl -p

當page cache大小超過100mb前,停止寫入,未超過15s,關閉電源,重啟設備。

關機前page cache狀態及文件大小。

[root@node01 ~]# ll -h test.txt && pcstat test.txt
-rw-r--r--. 1 root root 550 Aug  1 21:02 test.txt
+----------+----------------+------------+-----------+---------+
| Name     | Size (bytes)   | Pages      | Cached    | Percent |
|----------+----------------+------------+-----------+---------|
| test.txt | 550            | 1          | 1         | 100.000 |
+----------+----------------+------------+-----------+---------+

掐斷電源,重啟。(注意,這里不能按正常流程重啟電源)

重啟后page cache狀態及文件大小。

[root@node01 ~]#  ll -h test.txt && pcstat test.txt
-rw-r--r--. 1 root root 0 Aug  1 21:04 test.txt
+----------+----------------+------------+-----------+---------+
| Name     | Size (bytes)   | Pages      | Cached    | Percent |
|----------+----------------+------------+-----------+---------|
| test.txt | 0              | 0          | 0         |     NaN |
+----------+----------------+------------+-----------+---------+

之前寫入的數據全部丟失,雖然超過臟頁存活時間,但是沒有到檢測時間,page cache內的數據丟失。

到此這篇關于Java page cache回寫機制案例詳解的文章就介紹到這了,更多相關Java page cache回寫機制內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/top_explore/article/details/107726941

延伸 · 閱讀

精彩推薦
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
主站蜘蛛池模板: 久久综合久久久 | 激情欧美一区二区三区中文字幕 | 欧美日韩一级二级三级 | 精品免费视频 | 国产成人精品免高潮在线观看 | 精品国产不卡一区二区三区 | 欧美成人二区 | 在线观看中文字幕 | 国产精品美女久久久久久久网站 | 伦理自拍| 成人精品一区二区三区 | 在线观看黄色电影 | 国产精品久久久久久久久久久久| 国产在线视频一区二区 | 国产精品污www一区二区三区 | 日韩和的一区二在线 | 美女毛片 | 亚洲 中文 欧美 日韩 在线观看 | 最近免费观看高清韩国日本大全 | 在线国产专区 | 日韩欧美在线观看一区二区 | 伊人一区二区三区 | 日韩一区二区三区在线播放 | 色888www视频在线观看 | 日本做暖暖视频高清观看 | jizzxxx日本| 午夜男人 | 美足av| 天天舔日日干 | 超碰在线看 | 国产主播福利 | 成人午夜精品视频 | 红桃视频一区二区三区免费 | 在线免费av观看 | 国产色爱综合网 | 中国黄色一级 | 日韩精品一区二区三区中文字幕 | 一级全黄少妇性色生活片免费 | 免费av在线| 日韩精品中文字幕在线 | 亚洲在线电影 |