我寫的scala應用程序使用了很多Kyotocabinet的Db文件(我需要一次打開500-3k小kyotocabinet文件)。
但512打開(創建)的數據庫文件後,我有一個錯誤「錯誤:成功:沒有錯誤」,並沒有創建新的數據庫文件。
谷歌搜索後,我發現在這裏與東京內閣+ Java類似的問題:https://groups.google.com/forum/#!msg/tokyocabinet-users/ve6OsRm_hyU/hXC7795iqPsJ但沒有解決方案。
那麼交易是什麼?我如何在一個應用程序中打開更多kyotocabinet文件?可能是Kyotocabinet有一些錯誤?Kyotocabinet和Scala(Java):數據庫文件的限制是否打開?
0
A
回答
1
好,似乎,我發現我的問題的答案...
這不是Java或斯卡拉特定的問題,而是Kyotocabinet
首先,我嘗試重現另一種語言這種行爲。所以,我使用Perl所著的測試程序,它也失敗,但隨着更多信息的消息:pthread_key_create
之後得到的來源:
終止扔「的std :: runtime_error」
什麼()的一個實例後調用kyotocabinet並研究了爲每個京瓷File()對象創建的特殊TSDKey對象,並且此對象創建了pthread_key。默認情況下,一個 進程可以創建有限數量的此鍵,並且此數字在PTHREAD_KEYS_MAX中定義。
如此看來,在一個進程中打開超過512頁分貝京都的文件是不可能的:(
0
是的,我做了一個嘗試,提高宏觀PTHREAD_KEYS_MAX的值會解決這個問題。
我使用Ubuntu 16.04,與libc的版本2.23。pthread是在libc中的一個插件。
修改從宏觀PTHREAD_KEYS_MAX 1024到2048.不要太大。我試過10240,但測試程序崩潰。
修改系統包含文件local_lim.h中的maxcro值,並用新版本替換系統庫。
重建kyotocabinet。
將libkyotocabinet.so和libpthread.so.0複製到您的測試程序路徑中。
出口LD_LIBRARY_PATH =/
執行測試計劃。最大數據庫文件的數量增加了一倍。
相關問題
- 1. Java中打開文件的數量是否有實際限制?
- 2. BerkeleyDB數據庫文件打開(java)
- 3. MySQL打開文件限制
- 4. OS X上是否存在Java特定的打開文件限制?
- 5. 德比數據庫是否有限制
- 6. 無法打開數據庫「test.sql」:無法打開xcode中的數據庫文件
- 7. Dropbox是否有文件數限制?
- 8. 是否可以打開的窗口數量有限制?
- 9. Akavache無法打開數據庫文件
- 10. sqlite3 - 無法打開數據庫文件
- 11. SQLiteException:無法打開數據庫文件
- 12. OperationalError:無法打開數據庫文件
- 13. sqlite3_open:「無法打開數據庫文件」
- 14. 無法打開數據庫文件 - sqlite3?
- 15. 無法打開sqlite數據庫文件
- 16. 無法打開數據庫文件
- 17. DatabaseError無法打開數據庫文件
- 18. SQLiteException:無法打開數據庫文件
- 19. nodejs/Mac並打開文件限制
- 20. SQLite java錯誤「無法打開數據庫文件」
- 21. Android數據庫錯誤(android.database.sqlite.SQLiteCantOpenDatabaseException:無法打開數據庫文件)
- 22. 如何限制MS Access數據庫打開
- 23. 打開數據庫時無法打開物理文件
- 24. Cakephp:是否可以限制數據庫連接的數量?
- 25. 從數據庫C打開二進制文件#
- 26. sqlite無法打開數據庫文件被加密或不是數據庫?
- 27. 文件複製是否受CPU限制?
- 28. 打開文件和讀取數據
- 29. SQL Server數據庫和視圖中的表的數量是否有限制?
- 30. Spark/Scala打開壓縮的CSV文件
您使用的是Linux嗎?你有沒有嘗試增加ulimit? –
是的,我嘗試在控制檯中設置ulimit -n 8192,然後運行sbt中的測試代碼,但沒有任何效果...我也想到了mmap,京都人爲每個打開的文件使用,嘗試在打開文件時減少msiz = param,但這沒有幫助 –
爲什麼你需要多次打開數據庫?只需在程序啓動時打開它,並在完成時關閉它。 – SnakeDoc