risorse occupate java/tomcat

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
lordalbert
Linux 1.0
Linux 1.0
Messaggi: 72
Iscritto il: ven lug 29, 2005 0:00

risorse occupate java/tomcat

Messaggioda lordalbert » ven giu 17, 2016 21:22

Ciao ragazzi,
a lavoro sto imparando java per la creazione di backend restful. Java inizia a piacermi, e ho intenzione di iniziare dei progettini personali utilizzando tale linguaggio (sempre applicazioni web, usando java come backend restful). Più nello specifico, userei tomcat con l'implementazione Jersey delle jax rs.

Non so se volete smentirmi, ma io ho sempre considerato la jvm un ambiente pesante e avido di risorse. Io userei un piccolo serverino in affitto, non ha una grandissima potenza computazionale (anzi... è un Atom N2800, quindi limitato, con 4GB di ram). Secondo voi se ci installo tomcat, con 2-3 applicazioni web java funzionanti in simultanea, c'è il rischio che il server ceda?
Perchè l'alternativa sarebbe realizzare il backend in PHP, che mi da l'impressione di essere più leggero. In tal caso, non dovrebbero esserci problemi, giusto?


PS: A lavoro, dopo un po' che lavoro in Java con Eclipse aperto, il computer aziendale con cui lavoro inizia a cedere e ad essere davvero poco risponsivo. Non so se è windows, se è eclispe, se tomcat o altro, però con un i5 e 4GB di ram, è in sofferenza

Grazie :)

miklos
Linux 3.x
Linux 3.x
Messaggi: 1431
Iscritto il: lun lug 16, 2007 17:39
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2
Località: Roma

Re: risorse occupate java/tomcat

Messaggioda miklos » ven giu 17, 2016 22:14

nn è la jvm di per se ad essere pesante, ma tutto il circondario. gli standard java per le applicazioni web confrontati al PHP sono enormemente più complessi. inoltre spesso vengono usate librerie di librerie (tipo jersey) per fare cose che ad esempio con le sole servlet faresti ugualmente..lo stesso dicasi per gli ambienti di sviluppo. eclipse ha mille funzioni e fosse scritto in un altro linguaggio sarebbe altrettanto pesante.

per quanto riguarda la tua domanda la risposta è complessa... sicuramente il PHP è più snello, ma vero pure che se un'applicazione java è scritta con criterio nn hai grossi problemi.
in più mettici pure che dipende dal carico che devi sopportare

insomma... nn è cosi semplice ;)
ho visto cose che voi astemi non potete immaginare

lordalbert
Linux 1.0
Linux 1.0
Messaggi: 72
Iscritto il: ven lug 29, 2005 0:00

Re: risorse occupate java/tomcat

Messaggioda lordalbert » ven giu 17, 2016 23:33

ok, hai accennato a dei temi secondo me molto interessanti! :)

L'enorme complessità di tutto l'insieme Java per il web: Se uno scrive una applicazioncina semplice, ha senso tutta quella enorme complessità?
Sarà che ho poca esperienza nell'ambito dello sviluppo, però se penso ad una applicazione restful, la immagino per forza semplice. L'essenza del lavoro di tale applicazione rest è quella di salvare/recuperare dati dal db, eventualmente facendo qualche elaborazione dei dati, ma non vedo molta altra complessità. Eppure java mi sembra mooolto usato in ambito enterprise!

Librerie aggiuntive VS servlet: Il mio collega "esperto" mi ha spiegato che le servlet non vengono più molto usate, che si preferiscono le jax rs, per esporre servizi rest. (Ma anche leggendo la documentazione di Jersey, ho visto che implementa una servlet che fa da interfaccia, la quale poi richiama indirettamente il codice scritto dall'utente. Aggiunge quindi ulteriori layer e complessità in effetti..)
E' quindi più sensato scrivere direttamente la servlet che esponda servizi rest? Si possono fare le stesse cose ma in modo più performante? Oppure ci sono casi in cui è meglio usare le jax rs?

Cosa consiglieresti per imparare a scrivere applicazioni java con criterio? :D
io 3 settimane fa non sapevo manco come si creasse una classe Java, quindi ho sicuramente tanto da imparare su come scrivere bene il codice, e vorrei farlo! :)

miklos
Linux 3.x
Linux 3.x
Messaggi: 1431
Iscritto il: lun lug 16, 2007 17:39
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2
Località: Roma

Re: risorse occupate java/tomcat

Messaggioda miklos » sab giu 18, 2016 1:33

premesso che oramai in java lo standard delle servlet nn è più l'unico modo per sviluppare applicazioni web chiaramente come hai potuto intuire da solo ogni framework che segue quella parte dello standard j2ee e che gira su Tomcat & soci si deve basare per forza di cose sulle servlet... insomma se scavi nel sorgente troverai sempre e comunque la servlet padre di tutto

ora...se un tempo aveva senso creare dei framework che agevolassero il tutto (pattern model view controller) perché nn esisteva html5 e la navigazione era delegata al server, adesso con i servizi rest le cose sono cambiate.

infatti come con qualsiasi framework rest devi implementare una classe per la tua logica differenziata per invocazione (Get, piuttosto che Post ad esempio) invece di aggiungere override inutile fai lo stesso nelle servlet.

considera pure che con l'html5 sono state introdotte api per lo strage locale che praticamente eliminano la necessità di avere la sessione http canonica, quindi il tutto riduce ancora di più la necessità di framework per il web
ho visto cose che voi astemi non potete immaginare

miklos
Linux 3.x
Linux 3.x
Messaggi: 1431
Iscritto il: lun lug 16, 2007 17:39
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2
Località: Roma

Re: risorse occupate java/tomcat

Messaggioda miklos » sab giu 18, 2016 1:38

chiaramente questo vale in ambito home/startup... se proponi una soluzione web senza almeno un framework enterprise ti ridono dietro perché sti framework fanno parte del business delle consulenze :)
ho visto cose che voi astemi non potete immaginare

miklos
Linux 3.x
Linux 3.x
Messaggi: 1431
Iscritto il: lun lug 16, 2007 17:39
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2
Località: Roma

Re: risorse occupate java/tomcat

Messaggioda miklos » sab giu 18, 2016 1:45

per quanto riguarda consigli per imparare a programmare con criterio ti suggerisco il tempo e la curiosità... di documentazione java ne sta uno scatafascio, difficile darti dritte... io ho avuto la fortuna di lavorare su progetti di un certo livello dove le performance erano critiche e mi sono fatto le ossa sviluppando quasi senza alcun framework per questo motivo.
ho visto cose che voi astemi non potete immaginare

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5065
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: risorse occupate java/tomcat

Messaggioda ZeroUno » sab giu 18, 2016 14:57

Ti parlo da sistemista in quanto non sono programmatore ed odio java (i piccoli programmini che mi faccio sono in bash e i sitarelli personali in php), ma l'intera piattaforma che gestisco è composta da innumerevoli tomcat e jboss con applicativi scritti da varie persone, applicativi scritti bene e applicativi scritti a cavolo (di cui da non programmatore ho dovuto farci troubleshooting o, peggio, reverse enginering).
Io ho l'onere di garantire che il sistema su cui gira sia stabile e performante.
Detto questo non conoscendo i vari framework ti garantisco che le macchine che mi funzionano meglio sono quelle in cui l'applicativo rilascia correttamente la memoria; su alcune applicazioni la jvm non rilasciava correttamente le risorse, quindi ad un certo punto il garbage collection durava gradualmente più della durata dell'elaborazione.
Abbiamo migliorato tunando i parametri della memoria della jvm, aumentato la ram a 8G e messo un restart notturno in cron perchè in verità l'applicazione sarebbe stata da risviluppare da capo.
Altre applicazioni - che hanno anche un carico maggiore - scritte come si deve in 4G di ram e parametri della jvm di default ci sciacquano abbondantemente.

Conclusioni, se il serverino in affitto è per uso personale o con basso traffico e con poca necessità di 100% uptime, i 4G di memoria per 2/3 applicazioni sono tanti se fai una applicazione che gestisce come si deve la ram.

Sull'ambiente di sviluppo sul pc invece non so risponderti, ma è notorio che gli ambienti di sviluppo paradossalmente hanno bisogno di più risorse perchè l'uso è sicuramente più "sporco" rispetto a quello che avviene nell'ambiente di produzione (dove l'applicativo viene messo solo quando è stabile e testato), in compenso ti puoi permettere i reboot che vuoi.

Sempre da sistemista ti consiglio di scegliere una buona politica di logging nell'applicazione, con più livelli, info, warning, error, debug, perchè il logging è indispensabile per il troubleshooting, ma al contempo un log troppo verboso in ambiente di produzione appesantisce troppo il sistema (sia in spazio su disco che in I/O che in elaborazione) e rende il log illegibile. Il log dovrebbe anche avere una politica di rotate giornaliero e su ogni riga la data e id transazione o sessione se presente (su qualche server ho file di log da 20G che partono dal 2008 :shock: e sulle righe niente date; praticamente inutile e illegibile; ogni tanto mi faccio un giretto e sano la situazione con un logrotate); quindi sull'ambiente di sviluppo lo configuri a debug, mentre su produzione a info (e lo innalzi a debug solo quando qualcosa non funziona)
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

lordalbert
Linux 1.0
Linux 1.0
Messaggi: 72
Iscritto il: ven lug 29, 2005 0:00

Re: risorse occupate java/tomcat

Messaggioda lordalbert » dom giu 19, 2016 16:45

miklos ha scritto:chiaramente questo vale in ambito home/startup... se proponi una soluzione web senza almeno un framework enterprise ti ridono dietro perché sti framework fanno parte del business delle consulenze :)


Esattamente cosa intendi? Che il fatto di dirti "te lo sviluppo usando questo framework" fa si che la azienda che sviluppa chiede una cifra maggiore? Oppure perchè semplicemente il framework col nome più diffuso fa figo?
Ma non dovrebbe essere che la azienda, invece di tanti nomi, garantisca certo sw con certe caratteristiche, dalla affidabilità alle performance? Poi il come realizzarlo è scelta sua, a patto di rispettare i requisiti qualitativi e funzionali concordati col cliente.

ZeroUno ha scritto:Detto questo non conoscendo i vari framework ti garantisco che le macchine che mi funzionano meglio sono quelle in cui l'applicativo rilascia correttamente la memoria; su alcune applicazioni la jvm non rilasciava correttamente le risorse, quindi ad un certo punto il garbage collection durava gradualmente più della durata dell'elaborazione.


Grazie per tutte le info, molto utili!
Per quanto riguarda il rilascio della memoria... io ho letto che in Java non si rilasciano risorse, si rimuove semplicemente il puntatore alla cella di memoria (lo so che in Java non esistono puntatori, ma è per capirci! :D ) e poi ci pensa tutto il Garbage Collector

a questo punto, domanda agli sviluppatori: E' possibile gestire e liberare risorse a mano in java, senza lasciarlo fare al GC?

Avatar utente
brg
Linux 2.4
Linux 2.4
Messaggi: 424
Iscritto il: sab mar 12, 2011 14:20
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE4
Località: Montecatini
Contatta:

Re: risorse occupate java/tomcat

Messaggioda brg » dom giu 19, 2016 17:16

lordalbert ha scritto:
ZeroUno ha scritto:Detto questo non conoscendo i vari framework ti garantisco che le macchine che mi funzionano meglio sono quelle in cui l'applicativo rilascia correttamente la memoria; su alcune applicazioni la jvm non rilasciava correttamente le risorse, quindi ad un certo punto il garbage collection durava gradualmente più della durata dell'elaborazione.


Grazie per tutte le info, molto utili!
Per quanto riguarda il rilascio della memoria... io ho letto che in Java non si rilasciano risorse, si rimuove semplicemente il puntatore alla cella di memoria (lo so che in Java non esistono puntatori, ma è per capirci! :D ) e poi ci pensa tutto il Garbage Collector

a questo punto, domanda agli sviluppatori: E' possibile gestire e liberare risorse a mano in java, senza lasciarlo fare al GC?


In Java esistono i riferimenti, se non imposti tutti i riferimenti ad un dato oggetto a NULL il GC non può liberare la memoria, lo stesso vale per tutti i linguaggi con GC. Poi ci sono modi e modi di programmare che possono aiutare il GC, ma per fare questo bisogna conoscere il modo in cui è stato pensato il linguaggio e la sua virtual machine, es.: http://blog.takipi.com/5-tips-for-reduc ... -overhead/ .

Avatar utente
Toni
Linux 2.6
Linux 2.6
Messaggi: 996
Iscritto il: lun gen 30, 2006 22:08
Slackware: slackware-14
Kernel: 3.10.5
Desktop: i3
Località: milano

Re: risorse occupate java/tomcat

Messaggioda Toni » lun giu 20, 2016 0:20

Ciao,

se vuoi fare roba rest, puoi anche usare roba del genere:

http://sparkjava.com/