Ho impostato ulimit in /etc/security/limits.conf
. Quando accedo al mio ambiente desktop come utente testuser
normalmente (usando slim login
manager), tutto funziona bene.
Quando accedo come utente testuser
tramite Xephyr
(dall'altra mia sessione come un altro utente), tutto funziona bene tranne chromium
browser. Questo è l'errore che ricevo in dmesg
:
Chrome_ChildIOT (2472): VmData 4310827008 exceed data ulimit 4294967296. Update limits or use boot option ignore_rlimit_data.
E il cromo è inutilizzabile (si avvia, ma aspetta indefinitamente di caricare qualsiasi pagina)
Tutti gli altri programmi tranne chromium
avere i limiti corretti impostati. L'ho verificato usando:
find /proc/ -maxdepth 1 -user testuser -exec cat {}/limits ; | grep 'Max data size'
tutti i PIDs
avere Max data size
impostato su illimitato:
Max data size unlimited unlimited bytes
tranne chromium
processi:
Max data size 4294967296 4294967296 bytes
Max data size 17179869184 17179869184 bytes
Max data size 17179869184 17179869184 bytes
Max data size 17179869184 17179869184 bytes
Max data size 17179869184 17179869184 bytes
Max data size 17179869184 17179869184 bytes
Max data size 17179869184 17179869184 bytes
Max data size 17179869184 17179869184 bytes
Vorrei capire:
1) perché chromium
hanno limiti diversi rispetto a tutti gli altri programmi?
2) da dove provengono i limiti "predefiniti" (dove il cromo prende il limite 4294967296
da ?
3) come posso modificare questi limiti predefiniti una volta per tutte, a livello globale, per tutti i processi indipendentemente dal fatto che utilizzino pam o meno?
Risposta accettata:
- Perché il cromo ha limiti diversi rispetto a tutti gli altri programmi?
Chromium può sembrare una semplice applicazione ma non lo è, prima c'è il multi-threading che fa eseguire più processi a chromium per attività diverse (estensioni, schede, motore web di base, ecc.), quindi la virtualizzazione, chromium usa molti sandbox per isolare le attività di navigazione che fanno utilizzare più risorse rispetto ad altre applicazioni, inoltre il motore web utilizzato non è leggero... aggiungi a ciò le diverse librerie necessarie per l'esecuzione e altre funzioni di risorse pesanti... alcune documentazioni correlate sono disponibili qui, qui e questo articolo hanno alcune informazioni utili.
- Da dove provengono i limiti "predefiniti" (da dove il cromo prende il limite 4294967296?
4294967296 byte (4096 MB o limite di 4 GB) il cromo ha un limite di 4 GB in base alla progettazione, questo è hardcoded, maggiori informazioni al riguardo sono disponibili qui e qui
- Come posso modificare questi limiti predefiniti una volta per tutte, a livello globale, per tutti i processi indipendentemente dal fatto che utilizzino pam o meno?
Non è un compito facile ma lo stai facendo bene per la maggior parte dei processi usuali, ora per processi complicati come chromium devi personalizzare la tua configurazione per ogni app "speciale".
Correlati:Linux – La sincronizzazione dell'ora NTP richiede molto tempo?Per chromium ci sono alcuni parametri di comando che possono essere usati per personalizzare/abilitare/disabilitare funzioni, puoi provare a usarne alcuni per rendere chromium adatto alle tue esigenze, ecco alcuni switch interessanti:
Queste opzioni possono essere utilizzate con una riga di comando come questa /usr/bin/chromium --single-process
--single-process
--aggressive-tab-discard
--aggressive-cache-discard
--ui-compositor-memory-limit-when-visible-mb
--disk-cache-dir # Use a specific disk cache location, rather than one derived from the UserDatadir.
--disk-cache-size # Forces the maximum disk space to be used by the disk cache, in bytes.
--force-gpu-mem-available-mb # Sets the total amount of memory that may be allocated for GPU resources
--gpu-program-cache-size-kb # Sets the maximum size of the in-memory gpu program cache, in kb
--mem-pressure-system-reserved-kb # Some platforms typically have very little 'free' memory, but plenty is available in buffers+cached. For such platforms, configure this amount as the portion of buffers+cached memory that should be treated as unavailable. If this switch is not used, a simple pressure heuristic based purely on free memory will be used.
--renderer-process-limit # Overrides the default/calculated limit to the number of renderer processes. Very high values for this setting can lead to high memory/resource usage or instability.
Puoi anche eseguire chromium con uno script che aggiorni ulimit (nota che valori inferiori a 4 GB potrebbero mandare in crash il browser...)
ulimit -Sv 4352000000 #4.2GB
/usr/bin/chromium
# or 0.42GB, it works but the browser may crash
#ulimit -Sv 435200000 #0.42GB
#/usr/bin/chromium