Saya memiliki aplikasi server khusus yang berjalan pada Windows 2008 R2. Ini adalah Layanan Windows buatan rumah yang ditulis dalam .Net yang mendukung sejumlah terminal khusus. Saya memiliki mesin uji yang memiliki spesifikasi yang mirip dengan server langsung dan saya memiliki satu set simulator klien yang dapat saya gunakan untuk menghasilkan beban yang merupakan perkiraan wajar dari sistem nyata. Saya harus dapat mendukung 12.000 dari ini dan saat ini server kehabisan memori (Paging akan melalui atap).
Rencana saya adalah hanya memulai 100 simulator, mengukur penggunaan memori, kemudian mulai mengukur lebih dari 100 memori lagi dan mengulangi sampai paging mulai naik (Pada kenyataannya saya akan mengambil lebih dari tiga poin data.) Ini seharusnya memberi saya gambaran untuk jumlah memori tambahan yang diperlukan untuk 100 simulator dan memungkinkan saya untuk memproyeksikan berapa banyak memori yang dibutuhkan. Saya hanya perlu ide kasar +/- 30GB untuk menghindari membeli 2TB penuh (senilai $ 150.000) yang akan diambil server. Pertanyaan saya adalah apakah ini metode yang masuk akal untuk digunakan dan jika demikian, Penghitung Kinerja mana yang akan Anda monitor untuk memberikan jumlah memori yang sebenarnya digunakan?
Saya secara khusus berbicara tentang memori di sini sebagai perbedaan antara Working Set, Private Bytes, Committed, Shared, Virtual dan semua istilah memori lainnya membingungkan saya. Saya pikir saya dapat mengatur untuk memonitor CPU, IO dan Networking sendiri. Hal lain yang saya perhatikan adalah bahwa. Net Cache menyesuaikan penggunaan memorinya tergantung pada apa yang tersedia yang membuat sulit melihat tren.
sumber
Jawaban:
Secara jujur? Aku TIDAK .
Saat menentukan server yang akan melihat segala jenis beban kerja nyata, saya menjejalkan RAM sebanyak yang saya mampu secara wajar (sistem lebih cenderung menghasilkan RAM yang dibatasi daripada CPU atau Disk yang dibatasi - satu-satunya hambatan yang dijamin lainnya adalah sisi depan bis).
Jika Anda ingin mengetahui berapa banyak RAM aplikasi Anda dapat menggunakan tes beban dasar seperti yang Anda usulkan adalah awal yang baik, tetapi jika Anda sudah memiliki sistem ini dalam produksi (sepertinya Anda lakukan) dan sistem produksi Anda menukar Anda tugas lebih mudah: Cari tahu berapa banyak ruang swap yang Anda gunakan -> Tambahkan setidaknya 2x lebih banyak RAM (bulatkan agar sesuai dengan kendala ukuran DIMM sistem Anda).
Jika Anda melakukan tes beban untuk mendapatkan angka kasar dan memperkirakan dari sana, ingatlah untuk memperhitungkan beberapa hal:
Kurva memori mungkin akan menjadi dua segmen yang berbeda
(peningkatan tajam awal sebagai kerangka kerja / shared library di-cache, kemudian kurva sedikit lebih curam karena setiap kode baru aplikasi yang tidak dapat dibagikan dimasukkan ke dalam memori)
Anda masih memerlukan RAM gratis untuk disk dan caching perpustakaan bersama, dan untuk OS.
(Ini harus setidaknya beberapa pertunjukan atas apa yang dibutuhkan aplikasi Anda)
SEMUA perangkat lunak bocor memori (setidaknya semua perangkat lunak praktis tidak), jadi perhatikan itu dalam pengujian Anda dan pastikan Anda memiliki ruang untuk menangani kebocoran.
Beban Anda mungkin akan meningkat selama masa pakai server. Rencanakan dengan tepat.
(Jika Anda tidak memiliki angka perencanaan kapasitas yang baik, gandakan beban kerja hari ini dan rencanakan untuk mengatasinya).
Membeli terlalu banyak RAM hari ini lebih murah daripada memiliki lingkungan Anda jatuh besok.
sumber
Terima kasih, pembaruan setidaknya memberi petunjuk kepada semua orang. Bahwa Anda merenungkan memori 2TB berarti Anda bermain di stadion baseball yang berbeda dengan pengaturan biasa. Sistem besar. benci memikirkan berapa banyak panas yang akan padam.
Mengingat bahwa ini merupakan proses server internal dan bahwa Anda kehabisan memori (Anda tidak mengatakan pada tingkat apa Anda mulai paging) tapi saya ingin menghilangkan kemungkinan bahwa proses server mengkonsumsi jumlah memori yang lebih besar sebelum pergi lebih lanjut. Jika ini terjadi tidak ada bedanya dengan apa yang Anda lakukan, sistem akan berhenti pada titik tertentu.
Saya tidak tahu ada alat generik yang dapat Anda gunakan untuk memberi Anda lebih dari sekadar gambaran umum tentang apa yang terjadi ... apa yang datang dengan windows. Proses layanan itu sendiri adalah kotak hitam dan tim pengembang Anda perlu menyediakan alat pemantauan.
Kembali cepat dari perhitungan amplop:
Ini tidak akan keluar dari kisaran set kerja .net exe yang normal.
Apakah layanan memiliki beberapa utas? Jika mereka meluncurkan utas untuk setiap koneksi, ada baiknya melihat bagaimana mereka melakukan ini. ProcExp.exe dari microsoft adalah cara mudah untuk melihat apakah Anda memiliki banyak utas dan apa yang dikonsumsi oleh utas tersebut. Ia tidak tahu tentang .net tetapi akan memberi Anda penghitung win32.
Bisakah Anda menunjukkan berapa banyak memori dan berapa banyak koneksi yang Anda miliki ketika melakukan pengujian sebelum mulai paging?
Jadi, bagaimana cara menetapkan jika proses server memiliki masalah kebocoran memori? Itu bisa mengakumulasi lebih banyak memori dengan setiap sesi terhubung, atau bisa juga mengakumulasi memori dan tidak membebaskannya.
Apa yang dapat Anda lakukan adalah - memilih sejumlah sesi yang tidak memicu paging dan mensimulasikan jumlah koneksi tersebut. - Jalankan simulasi lebih dari beberapa jam dan gunakan perfmon untuk menonton penghitung memori dasar. - Ulangi tes ini dengan sesi yang terhubung sebentar dan lepaskan.
Idenya adalah untuk melihat apakah layanan ini mengkonsumsi lebih banyak dan lebih banyak memori dengan setiap sesi, atau jika sesi terbuka memicu penggunaan memori yang semakin meningkat.
sumber