|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2005
Messaggi: 271
|
Consigli sulla gestione della memoria per applicazioni .NET in terminal server
Salve, ho alcuni dubbi su un progetto che mi trovo a gestire e volevo da voi alcuni consigli in base alle vostre esperienze. Vi spiego subito la situazione.
Ho un server con 12Gb di RAM e sistema operativo Windows Server 2008 R2; su tale server risiede un'applicazione di gestione delle vendite sviluppata in WPF e che utilizza NHibernate (2.1.2) per la persistenza dei dati (il DBMS è SQL Server 2008). Al server accedono contemporaneamente via VPN dai 30 ai 40 utenti, che utilizzano l'applicazione in Desktop Remoto. In questi giorni stavo monitorando il consumo di risorse nei momenti in cui lavorano tutti all'applicazione ed ho visto che per ogni utente la mia applicazione occupa dai 300 ai 500 mb; tale situazione sembra ridurre la memoria disponibile per SQL Server (che inizialmente ho visto essere intorno ai 2Gb, mentre nei momenti di massimo carico l'ho vista scendere a 400mb) e mi chiedevo se questo potesse incidere sulle performance nelle operazioni di lettura/scrittura dati nel db. Inoltre ho visto che praticamente il sistema raggiunge quasi 100% della memoria in uso ed ho paura che questa situazione "limite" possa portare ad ulteriori problematiche. Ho iniziato ad analizzare la mia applicazione per rendermi conto di quale possa essere la causa di tale consumo di memoria e mi sono reso conto che in parte ciò è dovuto alla cache di NHibernate. Nell'applicazione infatti sono presenti delle manutenzioni che trattano una gran mole di dati e, nel momento in cui carico i dati, la memoria in uso per il singolo processo cresce di molto. La cosa che non mi convince è che se chiudo la form di manutenzione di tali dati la memoria rimane comunque allocata (e credo che ciò sia dovuto al fatto che i dati rimangono comunque nella cache di NHibernate), per poi essere riciclata automaticamente quando ci sono nuove richieste. Alla luce di ciò le mie domande sono... In una situazione del genere mi devo preoccupare del fatto che la memoria in uso del sistema sia quasi il 100%? o sarebbe oppurtuno estendere la RAM? E' normale che la mia applicazione non rilasci immediatamente la memoria allocata in seguito al caricamento dei dati? Il riciclo della memoria è gestito automaticamente del sistema? Sarebbe opportuno che nella configurazione di SQL Server prevedessi un limite minimo di memoria assegnata al processo? Come faccio a rendermi conto se sono effettivamente in una situazione di criticità? In base alle vostra esperienze personali avete dei consigli da darmi in merito? Vi ringrazio in anticipo per informazione.
__________________
LucaP....pollosky.it Motherboard Gigabyte GA-EP45-DS3P, Lc-Power Hyperion 700W, Cpu Intel Quad Core Q9400, Ram 8GB Corsair Dominator 1066Mhz, 2 x HardDisk Western Digital 500Gb RAID 0, Sapphire ATI Radeon HD 4850 |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jan 2003
Città: Milano - Udine
Messaggi: 9418
|
Quote:
Lo usate? Idem come sopra i meccanismi di caching in particolare di secondo livello (che in Hibernate esiste da una vita e da non molto è stato poi mutuato in Entity Framework). Ti giro un paio di reference proprio su NHibernate http://knol.google.com/k/nhibernate-...g-performance# http://stackoverflow.com/questions/1...oading-feature e sottolineo in particolare questo passaggio che penso possa interessarti: Codice PHP:
|
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Dec 2005
Messaggi: 271
|
Si ho utilizzato il lazy-loading ma non è tanto un problema di performance quanto un problema di occupazione della memoria. Quando si carica una corposa lista di entità credo che la cache di NHibernate faccia aumentare la memoria in suo per il processo.
__________________
LucaP....pollosky.it Motherboard Gigabyte GA-EP45-DS3P, Lc-Power Hyperion 700W, Cpu Intel Quad Core Q9400, Ram 8GB Corsair Dominator 1066Mhz, 2 x HardDisk Western Digital 500Gb RAID 0, Sapphire ATI Radeon HD 4850 |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2003
Città: Milano - Udine
Messaggi: 9418
|
Quote:
Mi chiedo però se in quel passaggio non si intendesse anche memoria primaria e non di massa. Però se mi dici che hai già il lazy loading... Curiosità il lazy come lo utilizzi? Per capirci, è impostato a "true" o "proxy" il mapping? |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Dec 2005
Messaggi: 271
|
E' impostato "true" ed utilizzo Castle per il DynamicProxy delle classi
__________________
LucaP....pollosky.it Motherboard Gigabyte GA-EP45-DS3P, Lc-Power Hyperion 700W, Cpu Intel Quad Core Q9400, Ram 8GB Corsair Dominator 1066Mhz, 2 x HardDisk Western Digital 500Gb RAID 0, Sapphire ATI Radeon HD 4850 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:37.




















