我有3個在Linux上運行並執行數據庫查詢(MariaDB)和一些文件IO(硬盤和USB)的java進程。有時發生的情況是,來自一個進程的寫入操作不會反映在其他java進程上。在多個進程之間的Linux操作系統上緩存問題
兩種方案:
- 在由工藝A中的INSERT查詢的完成,進程A立即啓動另一個Java進程(進程B),進程B不在數據庫發現插入的值。
- 進程A從某個服務器下載安裝的USB上的路徑X上的文件。下載完成後,進程A通過RMI將路徑X發送給進程B.當進程B嘗試讀取X處的文件時,它會找到0字節的文件。只有當路徑X位於USB上時,纔會發生這種情況,從未在硬盤上看到過這個問題。如果我在發送路徑X到進程B之前嘗試讀取進程A中的文件屬性,一切都很好。
我懷疑在訪問剛剛寫入的數據的多個進程之間存在一些緩存問題。
更多信息: JAVA 1.8的OpenJDK 的Linux版:Fedora/CentOS的
一個事務,它是一個直接的INSERT查詢。我沒有在連接上設置任何自動提交屬性,自動提交的默認值是多少,更重要的是,如果設置爲TRUE,性能是否會受到影響?我仍然可以對事務進行一些查詢。 2.是的,我正在關閉流之前發送到其他進程。我會毫不猶豫地嘗試FileChannel.force()或RandomAccessFile的同步模式,然後我需要首先對這些進行讀取,以確保性能問題與IO上發生的USB一樣。 謝謝,你的回答有很大幫助。 –