Gestione memoria in ambiente Hosting

martedì 20 novembre 2012 - 14.24
Tag Elenco Tags  C#  |  .NET 4.0  |  Visual Studio 2010

andrestu Profilo | Expert

contesto:
vorrei capire come gestisce la memoria (parlo di memoria RAM) un server IIS, nel senso che ho sviluppato un sito che fà pesantemente uso della memoria su Server, non intendo spazio su disco o database ma di memoria RAM.
il punto è che ultimamente credo di perdere oggetti salvati in Application, vi è mai capitata una cosa simile ?
immagino che su un IIS condiviso che funziona da Hosting ci sarà un TOT massimo disponibile per ogni dominio, a questo punto la domanda è:
se arrivo a saturare il massimo possible di memoria che mi viene concesso, cosa succede ? viene riavviata in automatico l'applicazione ?

Andrea Restucci - Web Developer

ridaria Profilo | Expert

ho sviluppato un sito che fà pesantemente
>uso della memoria su Server, non intendo spazio su disco o database
>ma di memoria RAM.

diciamo che usare "MOLTA RAM" del server non è una soluzione ottimale.

Pensa se tutti lo facessero!

Il server cade ogni due e tre!

Ma cosa intendi uso massiccio?

Ero io sul tuo sito quando è caduto, prima mi ha detto che la sessione era terminata e poi se ne andato sulla pagina di errore.

Quando termina una Session, tutto ciò che hai messo in essa va perduto!


Riccardo D'Aria

andrestu Profilo | Expert

> Ma cosa intendi uso massiccio?

praticamente faccio cache dei dati in Application e in Session, quindi non potendo mettere mano su server sinceramente non so come controllare la quantità di RAM occupata, potrei fare una stima ma comunque il problema è che non so in che modo viene gestita dall'hosting

> Ero io sul tuo sito quando è caduto, prima mi ha detto che la sessione era terminata e poi se ne andato sulla pagina di errore.

il massaggio di scadenza sessione è normale, ho progettato il sito in modo che alla scadenza sessione viene mostrato il messaggio e cliccando su ok viene redirezionato l'utente alla pagina iniziale. quello che non è normale è l'errore che ti ha dato.
ti spiego brevemente:
all'avvio dell'applicazione vengono memorizzati in application diversi dati, la mancanza di questi dati (neccessari al funzionamento del sito) genera l'eccezione che hai visto, le cause potrebbero essere 2:
- la pagina viene richiamata prima che l'applicazione sia inizializzata completamente - il metodo che inizializza tutto è inserito all'interno di Application_Start nel Global.asax - sinceramente non so se questo possa accadere in teoria il metodo dovrebbe essere completamente processato prima che venga tirata su la pagina
- qualche dato presente in application viene perso per un occupazione eccessiva della mamoria

comunque oggi ho fatto qualche cambiamento, vediamo se si ripresenta l'errore.
la cosa strana è che ha funzionato tutto regolarmente per un mese, ed è questo che mi fa venire il dubbio, o hanno modificato qualcosa in questi giorni su Register oppure l'occupazione della memoria è aumentata perchè i dati sono aumentati




Andrea Restucci - Web Developer

ridaria Profilo | Expert

>> Ma cosa intendi uso massiccio?
>
>praticamente faccio cache dei dati in Application e in Session,
>quindi non potendo mettere mano su server sinceramente non so
>come controllare la quantità di RAM occupata, potrei fare una
>stima ma comunque il problema è che non so in che modo viene
>gestita dall'hosting
>
>> Ero io sul tuo sito quando è caduto, prima mi ha detto che la sessione era terminata e poi se ne andato sulla pagina di errore.
>
>il massaggio di scadenza sessione è normale, ho progettato il
>sito in modo che alla scadenza sessione viene mostrato il messaggio
>e cliccando su ok viene redirezionato l'utente alla pagina iniziale.
>quello che non è normale è l'errore che ti ha dato.
>ti spiego brevemente:
>all'avvio dell'applicazione vengono memorizzati in application

io li metterei in un kookie!

>diversi dati, la mancanza di questi dati (neccessari al funzionamento
>del sito) genera l'eccezione che hai visto, le cause potrebbero





Riccardo D'Aria

andrestu Profilo | Expert

non si tratta solo di piccoli dati, ma anche di tutti i dati delle varie tabelle del db

Andrea Restucci - Web Developer

ridaria Profilo | Expert

allora la RAm del server la hai rimpinzata di dati! :-)

non credo sia una buona soluzione.


Riccardo D'Aria

andrestu Profilo | Expert

dipende dai punti di vista, ovvio che in questo modo cè bisogno di una più attenta gestione, e comunque quando utilizzi controlli come sqldatasource in ogni caso gli oggetti tipo datatable vengono gestiti in memoria...

Andrea Restucci - Web Developer

ridaria Profilo | Expert

>dipende dai punti di vista, ovvio che in questo modo cè bisogno
>di una più attenta gestione, e comunque quando utilizzi controlli
>come sqldatasource in ogni caso gli oggetti tipo datatable vengono
>gestiti in memoria...


OK fai come meglio ritieni.

cmq tornando al discorso dell'appunto che ti ha fatto quello sulla pagina piemonte e torino??

Ciao

Riccardo D'Aria

andrestu Profilo | Expert

e ancora non si è fatto risentire. tu che pensi a riguardo ?
query tramite url o altro modo ?
io trovo tanto comodo costruire la query tramite i valori presi dai controlli non capisco dove sia il grosso problema, oltretutto se usi url devi anche trovare il modo di crearla dinamicamente sul client ad ogni cambio valore. in aggiunta ho creato dei controlli personalizzati che salvano il proprio valore anche al cambio pagina, in questo modo se io faccio una ricerca e poi navigo in altre pagine e ritorno sulla vetrina mi ritrovo la stessa lista al momento del cambio pagina...

Andrea Restucci - Web Developer

ridaria Profilo | Expert

ma a dire il vero mica ho capito cosa intendeva dire.
Riccardo D'Aria

andrestu Profilo | Expert

io neanche, redirect 301 ??? bo e che ne so, per l'appunto ho posto il problema in questo post, secondo me si riferisce chissà a quale meccanismo che utilizza regolarmente ignorando del tutto l'aspetto server-side
Non credo che un metodo escluda l'altro, oppure che un metodo non ti dà la possibilità di fare cose che l'altro metodo può fare, credo solo che ci saranno aspetti positivi e negati in entrambe le metodologie.
io non dico che è sbagliata o giusta l'una o l'altra tecnica, vorrei solo capire le differenze e a quanto pare, vista la risposta che mi ha dato quando gli ho chiesto quali erano gli aspetti negativi della mia implementazione, non lo sa nemmeno lui...

Andrea Restucci - Web Developer

ridaria Profilo | Expert

ma questo parla a ragion veduta?

Ha mai scritto una riga di HTML almeno????

Io comincerei da qui!

BOOOOOOO






Riccardo D'Aria

andrestu Profilo | Expert

guarda se dovessi risentirlo non so se insesterò più di tanto anche perchè forse deve passarmi qualche lavoro e non vorrei si irritasse ancor di più.
se proprio vorrà la ricerca tramite Url lo farò, l'unica cosa e che non avendolo mai fatto non mi viene in metne altro se non quello di crearmi a mano l'URL tramite javascript in base ai valori dei controlli oppure esiste qualche altra tecnica ? ora che mi viene in mente bisognerebbe usare MVC ma non lo conosco ancora...

Andrea Restucci - Web Developer

ridaria Profilo | Expert

OK

speriamo che torna dai.

almeno altro lavoro.


Ciao


Riccardo D'Aria

alx_81 Profilo | Guru

>e ancora non si è fatto risentire. tu che pensi a riguardo ?
>query tramite url o altro modo ?
visto che anche se in ritardo, mi sono interessato al tuo problema anche per solidarietà tecnica , non ci sono veri e propri modi da seguire. Dipende da come lo vuoi sviluppare, da quanto devi passare nella ricerca, da che pattern usi, dal metodo di passaggio dati (POST, GET, ecc..) eccetera.
Ad esempio, con MVC cambia tutto, eppure puoi usare o meno l'url. Non è che l'url è cosa brutta, anzi, tantissimi servizi lo consumano e mica c'è niente di male nel farlo! Certo, se passi username e password in chiaro.. qualunque metodo è brutto, ma il querystring è ancora più semplice da "vedere".. Ma sinceramente io non mi porrei più di tanto il problema. Dipende solo da come credi sia opportuno fare la chiamata. Ad esempio, per pochi dati è molto comodo non fare POST e quindi viene anche comodo utilizzare il querystring. Considera che poi in rete ci vorrebbe pure anche qualcosa come l'url rewriting, l'offuscamento, ecc.. insomma, nel tuo caso mi sembra veramente troppo sindacare sul come farlo. Io ho paura che sto tizio volesse chiamare semplicemente il tutto da url per comodità sai?
comunque, se fosse un tecnico spinto ti direbbe di mettere in sicurezza ed evitare lo sniffing, non quello che ti ha detto imho..

>io trovo tanto comodo costruire la query tramite i valori presi
>dai controlli non capisco dove sia il grosso problema, oltretutto
>se usi url devi anche trovare il modo di crearla dinamicamente
>sul client ad ogni cambio valore. in aggiunta ho creato dei controlli
>personalizzati che salvano il proprio valore anche al cambio
>pagina, in questo modo se io faccio una ricerca e poi navigo
>in altre pagine e ritorno sulla vetrina mi ritrovo la stessa
>lista al momento del cambio pagina...
Beh a dire il vero questo è facility, ma sotto sotto non è che cambi molto eh..

Per quanto riguarda la memoria dell'hoster, fai attenzione perchè senza particolare scheduling loro fanno il recycle delle pool (che molto probabilmente non sono nemmeno macchine fisiche) e quindi perdi TUTTO. se vuoi fare caching, forse è ora di pensare di prendere macchine cloud e installare servizi di cache là sopra (windows azure è molto comodo).

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

andrestu Profilo | Expert

scusate la cunfusione ma stiamo parlando di un argomento discusso su un altro post, comunque visto che ci siamo continuamo qui.


> visto che anche se in ritardo, mi sono interessato al tuo problema anche per solidarietà tecnica
grazie per la solidarietà, ogni tanto ne ho proprio bisogno, c'è da perdersi in questo oceano di tecnologie

> non ci sono veri e propri modi da seguire...
in effetti è quello che pensavo, ho postato il problema giusto per capire quali possono essere le differenze consapevole del fatto che tra le due modalità non c'è ne una giusta e l'altra sbagliata in assoluto, ci sono solo differenze.

> Ad esempio, con MVC cambia tutto, eppure puoi usare o meno l'url...
pensavo che con MVC si dovessero usare eclusivamente le URL con il metodo GET

> Ad esempio, per pochi dati è molto comodo non fare POST e quindi viene anche comodo utilizzare il querystring.
non facendo il post potrei ottenere un aumento delle prestazioni perchè non invio l'intero form, però forse in questo modo perderei il viewstate oppure no ? dovrei fare un test...
con "non fare il POST" intendi semplicemente la chiamata diretta dell'URL giusto ? un pò come succede con un tag <a> (link) giusto ? oppure imposti manualmente il form in qualche altro modo ?
l'unico modo che mi viene in mente per costruire dinamicamente lato client l'URL che effettua la query è utilizzre javascript ci sono altre tecniche ?


> Considera che poi in rete ci vorrebbe pure anche qualcosa come l'url rewriting
Aspnet dà già la possibilità di per sè di effettuare l'URL rewriting oppure devo configurare moduli esterni ? è una tecnica che non ho mai utilizzato.

> Per quanto riguarda la memoria dell'hoster, fai attenzione perchè senza particolare scheduling loro fanno il recycle delle pool
si grazie lo sò però c'è da dire che il recycle comporta un riavvio dell'applicazione quindi inserendo dei metodi di inizializzazione all'interno del Application_Start dovrei avere la certezza che ogni volta che richiamo una pagina questi metodi o sono già stati chiamati o vengono comunque chiamati.
Mi viene un dubbio però, se io richiamo la pagina e l'application deve essere inizializzata è possibile che la pagina venga istanziata prima che venga completamente eseguito il metodo Application_Start, in teoria questo non può succedere giusto ?

> se vuoi fare caching, forse è ora di pensare di prendere macchine cloud e installare servizi di cache là sopra
tanto per cominciare ora inizierò ad utilizzare l'oggetto cache invece di utilizzare l'oggetto Application per memorizzare i dati, stesso in questo forum mi era già stato suggerito e andando a leggerne le caratteristiche confermo ciò (una delle quali è thread-safe).
considera che ho sempre utilizzato l'application senza neanche fare il lock (inesperienza), e mi meraviglio come non abbia avuto grossi problemi.
per quanto riguarda il cache su altre macchine il concetto è chiaro, è l'implementazione che non mi è molto chiara. Aspnet da la possibilità di configurare la cache su altri host oppure devi gestire il tutto manulamente ?

Andrea Restucci - Web Developer
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5