Meslektaşım, sistemi çok yavaş yapan çok fazla bellek tüketen bir uygulama kullanıyor. Belleği İnternet üzerinden diğer bilgisayarlarla paylaşmak mümkün müdür?
Sistem 8 GB RAM'e sahiptir ve uygulama 6 GB'tan daha fazla tüketir.
Meslektaşım, sistemi çok yavaş yapan çok fazla bellek tüketen bir uygulama kullanıyor. Belleği İnternet üzerinden diğer bilgisayarlarla paylaşmak mümkün müdür?
Sistem 8 GB RAM'e sahiptir ve uygulama 6 GB'tan daha fazla tüketir.
Yanıtlar:
Sadece "başka bir yerde" başka bir yere kurmaya ya da uzman donanım veya yazılım kullanmaya imkan tanımayan bir makinede çalışan bağımsız bir uygulama olduğunu düşünüyorum. Diğer cevaplar (doğru), yazılım geçişini veya görev için özel donanımı ele alır.
Bir ağ üzerinden RAM paylaşmanın herhangi bir yolu, bu ağ ortamının sınırlamalarına tabi olacaktır. Gigabit Ethernet bile yaklaşık 100 MB / s (megabayt) ile sınırlı olduğundan, bu "RAM" hızınızın da sınırlı olacağı anlamına gelir.
100 MB / sn, aslında sisteminizde olan RAM hızının küçük bir bölümüdür. Programınız acı verici bir şekilde yavaşlayacaktır ve 90'ların başında bir bilgisayarda çalışıyor gibi hissedeceksiniz.
Modern sabit diskler, sıralı okuma ve yazma işlemleri için bundan biraz daha hızlıdır. SSD'ler birkaç kat daha hızlı.
Bu, programınızı tekrar daha yavaş bir sıraya sokacak gecikme sorunlarını görmezden geliyor.
Bu yavaşlıktan ve diğer teknik sorunlardan dolayı bu, “ev” veya “ofis” sistemleri için çözmeyi denemeye değer olduğunu düşündüğü bir konu değil. Gerekirse daha fazla RAM satın almak daha ucuz ve daha etkilidir.
Sadece bir sayfa dosyası için daha fazla RAM, hatta bir SSD satın alın. Bunu yapmanın, az miktarda fayda sağlamak için çılgınca miktarda iş veya donanım gerektirmeyen başka bir yolu yoktur.
Sadece tamlık için: InfiniBand diğer makinelerin belleğine doğrudan erişim sağlar.
Ancak, gerektirir:
Mevcut bir ağ üzerinden ÇALIŞmaz, bağlı tüm düğümler için tamamen bağımsız bir altyapı gerektirir. İnternet üzerinden de çalışmıyor
Is there any alternative solution?
Bu, büyük ölçüde verinin doğasına bağlıdır.
2 farklı makinede 2 farklı mysql sunucusu çalıştırabilirsiniz.
Ardından verileri 1 / 2'ye bölün ve otomatik olarak hangi sunucuya gideceğini bilmek için programı yazın.
Tabii ki, eğer uygunsa, bu herhangi bir sayıda sunucuya ölçeklenebilir.
Evet, Network Block Device protokolünü kullanarak yapmak oldukça kolaydır (ve bunu takas gerektiren disksiz sistemler için yaptım).
nbd-server
Sunucu makinesine yükleyin ve ana bilgisayar başına dosyaları otomatik oluşturmak için yapılandırın.
İstemci makinelerinizde NBD'nin çekirdeklerinde derlenmiş olduğundan emin olun ve sonra bunları bir NBD montajlı aygıta geçecek şekilde yapılandırın. nbd-client
Paket yardımcı olabilir.
Yukarıdakiler biraz belirsiz ise üzgünüm - Bunu yaptığım makinelere buradan ulaşılamıyor; Onlara erişimim olduğunda ayrıntıları girebilirim.
Adında alternatif bir NBD sunucu uygulaması var nbdkit
; Bu konuda hiçbir şey bilmiyorum.
Küçük, önemsiz detaylar göz önüne alındığında, "Windows 10, iş istasyonunun 8G B RAM'i var" , gerçekten sadece bir akıllıca cevap var: Daha fazla RAM al ve daha az zırvala.
Bir SSD satın almak ve sayfa dosyasını koymak bir sonraki en iyi seçenek olacaktır, ancak gerçekten ... daha fazla RAM satın alın.
Ağ üzerinden sayfa dosyasına ("belleği paylaş") hizmet etmek elbette mümkündür, ancak bu çok kötü bir fikirdir. Ağ üzerinden erişim süresinin yerel bir sürücüye erişmekten daha iyi olacağı sınır çizgisi vakaları olduğu doğru olsa da , aynı anda tutarlı düşük erişim süresine ve yüksek bant genişliğine ihtiyaç duyduğunuz için kullanım durumunuzla ilgisi yoktur . Unutmayın, bir veya iki sayfa hatası beklemiyorsunuz, sürekli değişiyorsunuz. Birkaç bin dolar ödemek istemiyorsanız, RAM veya SSD satın almak için hiçbir yere yakın olmanıza imkân yok.
8 GB, aynı anda Windows 10 ve hafızaya aç bir uygulamayı çalıştırmak için neredeyse yeterli değil . Word, Excel ve Outlook'u aynı anda çalıştırmak için ancak yeterli. Bu, tam olarak milyonlarca insanın iş dizüstü bilgisayarlarında her gün birlikte yaşamak zorunda oldukları tipik, tamamen kullanılamaz "toplam saçmalık şirket kurulumudur" . Başka bir bellek modülüne 100-200 para birimi yatırın ve bir hafta içinde maliyetini düşürür (dakikalar süren şeyler birkaç saniye alır ve zaman paradır - ne yazık ki bu yerel fasulye tezgahınızın başına geçmek genellikle zordur).
Alternatif olarak, makineye sahipseniz, Windows 10 saçmalığını azaltmak için NTLite'ı kullanarak bellek alanını azaltabilirsiniz. Veya, çoğunlukla gereksiz hizmetlerin% 80'ini kapatabilirsiniz. İnanılmaz görünüyor, ancak 2 GB RAM'in altında bir Windows son sürümünü çalıştırmak mümkün .
Ama gerçekten, sadece RAM satın alın ... değerli Windows saatlerini azaltmak için harcadığınız zamanı harcamaktan çok daha hızlı ve kolaydır.
Basit bir alternatif , uygulamayı uzaktaki bir bilgisayarda , muhtemelen tahsis edilmiş bir kullanıcı hesabı altında çalıştırmak ve basitçe RDP, VNC veya uygun olanı kullanarak kontrol etmektir.
Diğer bir seçenek, uygulamayı geçici olarak ramların kolayca yukarı veya aşağı ölçeklenebileceği bir ortamda dağıtmaktır.
Bir yeniden başlatma ile boyut olarak değiştirilebilen bir Amazon AWS örneğine bakardım.
IE, bir C5.large gibi küçük bir örnekte 4GB ram ve 2 çekirdeğe sahiptir ve linux için günde 2.04 USD, pencerelerin yüklenmesi için günde 4.26 USD tutarındadır. EBS disk alanı ekstra bir maliyettir ve ayrılan GB ile doğrusal olarak ölçeklenir.
Sisteminizi bu daha küçük boyutta ayarlayabilir ve ardından tam gürültü yapmak istediğinizde, durdurabilir, örnek boyutunu değiştirebilir ve yazılımı çalıştırabilirsiniz.
Ya da en büyüğü ...
https://www.ec2instances.info/ uygun bir beden seçmenize yardımcı olacaktır. Bazı konumların diğerlerinden daha pahalı olduğunu unutmayın. Singapur ve Kuzey Kaliforniya pahalıdır. Ancak VM'niz, çalışmadığı zaman, disk depolama maliyetleri dışında hiçbir ücrete tabi değildir.
Dezavantajı, eğer bu hafızaya uzun süre ihtiyaç duyarsanız, VM zamanını satın almanın pahalı bir yoludur. Ancak, muhasebeciler bazen kira gibi işletme maliyetlerini, yükseltme gibi sermaye maliyetlerini tercih ediyor gibi görünmektedir.
Diğerlerinin dediği gibi teknik olarak mümkün ama buna değmez.
Ancak, bilgisayarınızın kullanımını hızlandırmak istiyorsanız, bazı uygulamalarınızı uzaktaki bir sunucuya dışa aktarmak mümkündür.
Bu çoğunlukla ne üzerinde çalıştığınız ve hangi uygulamayı kullandığınıza bağlı olacaktır. Küçük bir veri çıkışı için çok fazla işlem süresi gerektiren programlar kullanıyorsanız, başka bir şey üzerinde çalışırken zamandan ve kaynaklardan tasarruf etmek için bunları bilgisayarınızdan farklı bir sunucuda çalıştırmasını sağlayabilirsiniz.
Aklımdaki örnek, her değişiklik yaptığımda kodumu test eden bir sunucudur. Böyle bir çözümü olan fikir belirli kullanım durumlarıyla sınırlı olmasıdır.
IT'den PC'niz için daha fazla RAM satın almasını isteyin ve uygulamanın Görev Yöneticisi'nde kullanımının ekran görüntüsünü kullanma gereksinimini gösterin.
Bunun için Kove adlı bir şirket aracılığıyla ticari bir çözüm var ( http://kove.net/). Spesifikasyonlara bağlı olarak, RoCE gibi diğer seçenekler bazen de sağlanabilir olmasına rağmen, “arka panelde” çalışmak için bir Infiniband altyapısı gerektirir (ethernet normal şekilde çalışır). Sıfır kod değişikliği entegrasyonuna izin vermek için bir dizi saydam arabirim ve daha doğrudan CPU erişimi olan (yani çekirdeğin tepesinden kaçınılarak) çekirdek baypas için API'ler sağlar. Performans açısından, uygulamanıza bağlıdır. Eğer CPU'ya bağlıysanız, etki minimum olabilir (ki bu şaşırtıcı olabilir). Yerel ana bilgisayara bağlı bellek bant genişliği iseniz, size daha büyük bellek verir, ancak zaten mevcut darboğaz tarafından boğulacaksınız. Bu durumda, iş yükünün bir kutuya konabilecek hafızadan daha büyük olması avantajlı mıdır? ve RAM tükendi değil? Sanallaştırma ve python makinesi öğrenme kitaplıklarıyla (çok) iyi sonuçlar gördük. Yüksek uçlu HPC uygulamaları daha kötü bir eğilimdedir, ancak CI'leri kullandık ve MPI ile karşılaştırıldığında artı sayılan düğüm sayıları azaltılırken (düğümler RAM için vardı, CPU döngüleri için vardı) performansın kabul edilebilir olmasını sağlamayı başardık. . Bunun meslektaşınız için iyi bir çözüm olup olmadığının anlaşılması zor, ancak bakabileceğiniz bir seçenek. Umarım yardımcı olur. Açıkçası, Kove için çalışmıyorum ve hiçbir finansal teşvikim yok, ancak onlarla birkaç yıldır birlikte çalıştım ve bu teknolojinin belirli hesaplama işlemlerini önemli ölçüde etkileme potansiyeline sahip olduğunu düşünüyorum. ancak C API'leri kullandık ve düğüm sayısını düşürürken performansın kabul edilebilir olmasını sağlamayı başardık (düğümler RAM için CPU döngüleri için oradaydı), bu da MPI ile karşılaştırıldığında bir artı. Bunun meslektaşınız için iyi bir çözüm olup olmadığının anlaşılması zordur, ancak bakabileceğiniz bir seçenektir. Umarım yardımcı olur. Açıkçası, Kove için çalışmıyorum ve hiçbir finansal teşvikim yok, ancak onlarla birkaç yıldır birlikte çalıştım ve bu teknolojinin belirli hesaplama işlemlerini önemli ölçüde etkileme potansiyeline sahip olduğunu düşünüyorum. ancak C API'leri kullandık ve düğüm sayısını düşürürken performansın kabul edilebilir olmasını sağlamayı başardık (düğümler RAM için CPU döngüleri için oradaydı), bu da MPI ile karşılaştırıldığında bir artı. Bunun meslektaşınız için iyi bir çözüm olup olmadığının anlaşılması zordur, ancak bakabileceğiniz bir seçenektir. Umarım yardımcı olur. Açıkçası, Kove için çalışmıyorum ve hiçbir finansal teşvikim yok, ancak onlarla birkaç yıldır birlikte çalıştım ve bu teknolojinin belirli hesaplama işlemlerini önemli ölçüde etkileme potansiyeline sahip olduğunu düşünüyorum.
Başka bir bakış açısı - belki de sorun sistem kaynakları üzerindeki sınır değil, arkadaşınızın yazdığı boşa harcanan uygulama. 6 GB RAM, çok fazla bellek harcar.
Sırf diğer uygulamaların birçoğunun aşırı şişmiş olması , arkadaş uygulamanızın bunlardan biri olması gerektiği anlamına gelmez. Farklı programlama yöntemlerinin kullanılması, hızı arttırırken hafıza gereksinimlerini azaltabilir. Örneğin, uygulama tüm veri kümesini belleğe yüklüyorsa ve üzerinde çalışıyorsa, örneğin birkaç yerel dizin ile (yerel veya uzak) SQL veritabanına veri seçme ve bu dizine erişme işleminden çok daha fazla boşa gider. Hepsini bir kerede yüklemek yerine, mümkünse veri bloğunu işlemesini sağlayın. Bellek içi yapılar da zararlı olabilir. İşiniz bittiğinde boş hafıza. Hafıza haritasını alabileceğiniz şeyleri RAM'e yüklemeyin. Ve yüzlerce başka ipucu ...
Bununla birlikte, uygulama gerçekten diğer bilgisayarlarda depolanması gereken daha fazla belleğe ihtiyaç duyuyorsa, memcached ve benzerini orada depolamak için değiştirilebilir. Gelecekte daha iyi ölçekleneceği için bonus puan.
Böylece kullanıcı HOW'u ağ üzerinden paylaşmasını istedi . İyi bir fikirse, hayır. Yani burada aslında nasıl yapabileceğini.
Bunun iyi bir fikir olduğunu veya başarılı olacaktır demiyorum ama gerektiği çalışır.
Bunun bir iSCSI bağlama noktası oluşturabileceğiniz Windows Server olmadığını farz ediyorum.
Bilgisayar 1 Adım:
Bilgisayar 2 adım:
Bitti!
Uyarılar - Windows sayfa dosyasını ağ paylaşımına taşımanıza izin veriyorsa, VHD saçmalığını atlayabilirsiniz. Çevrimiçi olarak bunun çok fazla örneği yok (açık nedenlerden dolayı).
Komple sistem kararsızlığı veya tamamen başka bir şey oluşabilir. Kimse ne olacağını gerçekten bilmiyor.
Herhangi bir türden sadece “hafıza” değil, ağ üzerinden paylaşım için “RAM” dediğiniz gibi, son cevap teorik olarak evet, pratik olarak hayır olacaktır.
Depolama ve diğer geçici veriler gibi diğer hafıza türleri ağda çeşitli amaçlar ve nedenlerle düzenli olarak paylaşılır. Aynı şekilde gerektiğinde RAM ağ üzerinden paylaşılabilir. Ancak performans ve maliyet gerçek dünyada mümkün olamayacak kadar yüksek olacaktır.
RAM veya rasgele erişim belleği, bir işletim sistemi tarafından çalışma alanı olarak kullanılır, böylece üzerinde birçok okuma / yazma işlemi gerçekleştirilir. Ortalama bir sistemde, RAM ile veri hızı kapasitesi diğer parçalara göre en yüksektir. RAM'i bir ağa yerleştirirseniz, çok yüksek hızlı veri aktarım kapasitesine sahip olmanız gerekir ve teknik olarak mümkün olsa bile maliyet yüksek olacaktır. Ağ hızı yükseltmesi için maliyetin çok az bir kısmı ile yerel olarak makineniz için RAM alırsınız.
Uygulamalar genellikle sanal bellekte çalışır, bu nedenle sanal bellek gereksinimleri, sistemin kullanılabilir fiziksel belleğini performanstan başka bir sonuç olmadan aşabilir. İşletim sistemi basitçe olacak sayfa aktif kullanım için her an gerektiği gibi diske sanal bellek dışarı fiziksel belleği boşaltmak için. Bu genellikle makul olan uygulamalar için sadece para cezası işleri yöreden (biraz uygulamanın sanal bellek alanında sınırlı alanlara odaklanmış herhangi bir zamanda aktivite). Bir uygulamanın zayıf bir konumu varsa (sürekli olarak tüm sanal alanın belleğine referansta bulunursa), tüm sanal belleği fiziksel bellekte saklanamadıkça kötü çalışır (tüm sanal belleği yerleşiktir).
Yani, burada birkaç olasılık var:
Uzak bir bilgisayarda bellek kullanma fikri temelde ağ bağlantılı bir disk belleği dosyası oluşturuyor . Teoride, işe yarayabilir, ancak pratikte, disk belleği dosyası bilgisayardaki yerel ise (kendi sabit diski) ağ bant genişliği ve gecikme nedeniyle performans çok daha iyi olacaktır. Uzaktaki sistemin disk belleği dosyasını belleğinde veya diskinde barındırması önemli değildir, tıkanıklık (performansın en önemli sınırlayıcısı) ağ olacaktır. Bu özellikle internet üzerinden gerçekleşecek, ancak uzaktaki bilgisayar aynı LAN'da bitişik olsa bile doğru olacaktır.
Bu gerçekten ne tür bir uygulama olduğuna ve tokmağın ne için kullanıldığına bağlı.
Örneğin, birçok web uygulaması, bir memcached
sunucuya bağlanarak ağ üzerinden RAM kullanabilir . Bu, önbellek verilerinin (ve erişilmesi hızlı olması gereken diğer verilerin) çok fazla RAM ile başka bir bilgisayarda saklanmasına olanak sağlayacaktır.
Tabi bu uygulamaya özeldir ve memcached kullanabilen bir uygulamaya ihtiyaç duyar. Tarayıcı, böyle bir önbellek arka ucunu kullanmayı desteklemediğinden ikinci bir durgunluk örneği açmanıza yardımcı olmaz.