2010-10-23 26 views
3

斷定以下情況:今天JVM中最接近真實(資源受限)分離物的是什麼?

  • 你有一個龐大而複雜的系統(分佈式,並行,龐大的數據集),它支持很多用戶。代碼被髮送到數據。
  • 要允許系統中的移動代碼 - 即不受信任的代碼,將相同的JVM中運行的系統的其餘部分,取數據的局部性的優勢,避免反序列化等

您可以將代碼放在一個有趣的類加載器中,並使用像小程序運行器那樣的自定義安全策略。但仍然存在問題:

整個系統應該受到保護以免受惡意代碼的影響 - 例如產生線程負載,吞噬所有cpu,分配太多內存。

千禧年初期提出的構想是JSR-121。隔離旨在帶來進程隔離的大部分好處 - 限制cpu使用,線程產生,堆使用:一般的資源分配。

鑑於這項工作似乎已被Sun拋棄,現在最接近的是什麼?

到目前爲止,我的想法是:

  • 字節碼轉換的代碼中插入分配跟蹤。谷歌似乎做了類似的事情:http://code.google.com/p/java-allocation-instrumenter/。它需要一點工作,像谷歌(約書亞)布洛赫自己進入一個角落,使各種事情包私人...
  • 也禁止安全經理不能調用的東西,例如線程創建。
  • 插入(罕見)中斷檢查到循環和遞歸函數中,以便監視線程可以觀察(使用ThreadMXBean),如果花費太長時間,則中斷有問題的線程。只是限制重入可能會更簡單 - 在對用戶代碼的任何調用中,基本塊只能在中止前輸入n次。

有沒有更好或現有的方法來做到這一點?

+0

我能想到的最好辦法解決一般情況下的問題現在要將每個用戶都放入自己的JVM中,該JVM的XMX較低,並受到CPU的操作系統的限制。隨着用戶數量的增長,效率非常低下,但編寫類似這樣的代碼的想法讓我大開眼界。 – bwawok 2010-10-23 16:52:22

+0

到目前爲止運氣還不錯?你會更新嗎?謝謝。我一直在尋找這個,這是我得到多遠http://stackoverflow.com/questions/3887130/java-implementation-of-a-jvm – mschonaker 2011-07-13 06:27:31

回答

2

這是一個複雜的問題。我的第一個想法是創建一個領域特定的語言,以滿足'移動'用戶的需求。 DSL無法執行危險操作。

誰會上傳不受信任的代碼?這聽起來像是一個可疑的想法。我們花費了大量的精力確保人們不能運行不可信的代碼;-)

+1

DSL是一個巨大的蠕蟲罐。如果它是內部的,無論如何你都會遇到這些問題。如果它是外部的,你必須實際設計語言 - 語言設計比字節代碼操作更難!並且實現一個足夠好的翻譯到字節碼讓熱點實際工作。無論如何,設計一個「不能」導致資源泄漏的dsl正在扼殺問題領域。這部分必須是運行時。所以,我寧願使用人們熟知的現有語言,因爲dsl基本上不能解決實際問題。 – rjw 2010-10-25 01:33:21

+1

至於可疑的想法,你認爲安全經理的觀點是什麼?對於運行不受信任的代碼.. – rjw 2010-10-25 01:49:44

1

問題是,唯一真正的隔離進程的方法是有專用的機器/硬件。你做的任何事情,你都必須做出妥協。取決於這些妥協是可以接受的,取決於是否與該代碼共享JVM的做法。

這不是你可以在一個平凡的方式,因爲你想防止你有沒有想過的事情(這別人可能會覺得有一天)

+0

這是一個令人不滿意的答案,基本上是個人懷疑的一個論點。我認爲你需要重讀這個問題,並找到一個實際原因,爲什麼這種方法行不通......你的投訴,如果它是有效的,將證明類型系統,內存保護,基於能力的安全性和所有其他保護機制不工作。這些系統都不能保護他們的作者沒有想到的錯誤。 Tbh,這個東西甚至不是新的 - 從七十年代以來,DBMS一直是資源受限的查詢。這裏沒有任何魔法。 – rjw 2010-10-25 01:44:19

+1

是的,有一些技術可以將表現良好的系統之間的影響降至最低。但爲了防止「惡意代碼」,您需要一個獨立的系統。例如,我可以在java中編寫一個簡單的程序,它將以一種方式將數據寫入磁盤,從而使系統癱瘓。甚至ssh或smtp都會認爲系統速度太慢了。您可以使用安全管理器來防止這種操作和其他許多操作,直到惡意代碼無法執行任何操作,那麼它將不會產生任何影響。基本上,有了惡意代碼,任何你允許它做的事都可以用來對付你。 – 2010-10-25 09:07:02

+1

減慢機器速度的一個簡單方法是無限地創建對象並觸發大量的GC。線程總內存不需要很大,但可以顯着減慢JVM速度。假設你禁止了所有的對象創建(使得代碼非常不可用),惡意代碼仍然可以調用像File.length()這樣的方法,該方法在JNI調用中創建對象,並且可以生成400 MB/s的垃圾,經常調用。注意:這種活動不僅會減慢JVM,而且會顯着影響整個機器的性能。 – 2010-10-25 09:19:14

相關問題