Journal : limiter la memoire pour un utilisateur

Posté par Matthieu C () le 12 février 2004
0
Existe t il sous linux un moyen de bloquer la limite de memoire allouable par un utilisateur ?

Je sais qu'il existe /etc/[security/]limits.conf, qui permet de le faire pour un process, mais des qu'on forke ca marche plus.

En gros existe il une limite permettant de bloquer les programme du genre:


int main()
{
while(fork()) {};
while(malloc(1024)) {};
while(1) {};
}

> Lire le journal (16 commentaires, moyenne: 1,3).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Re: limiter la memoire pour un utilisateur

Posté par Caeies () le 12/02/2004 à 13:12. (lien). Évalué à 2.

man bash
/ulimit
ulimit -u

Caeies

  • [^]Re: limiter la memoire pour un utilisateur

    Posté par Matthieu C () le 12/02/2004 à 13:48. (lien). Évalué à 1.

    c'est la meme chose que ce que l'on peut trouver dans limits.conf, et si tu met pas des trucs trop restrictif (100 proc, 100Mo par exemple) tu peux quand meme bouffer toute la memoire tres vite.

    Moi ce que je voudrai c'est que tout les process d'un utilisateur ne depasse pas une certaine quantitee de memoire....

    On a bien le nombre de process * la taille max par process qui donne cette valeur.

    Mais par exemple si l'utilisateur doit lancer X, open office, mozilla il a besoin d'au moins 50 Mo de memoire par process.

    Puis il faut quand meme un minimun de process (50) et on peut deja 250 Mo rien qu'en utilisant ces minimuns qui sont tres restrictif...

    En plus dans certains cas la limitation donne des resultat douteux : segmentation fault du programme + crash de bash ensuite....

    • [^]Re: limiter la memoire pour un utilisateur

      Posté par Matthieu C () le 12/02/2004 à 14:04. (lien). Évalué à 1.

      s/250 Mo/2 500 Mo

[HS]

Posté par snt () le 12/02/2004 à 14:30. (lien). Évalué à 0.

Desole pour mon post qui n'est pas en rapport avec ta question, mais je profite du fait que tu sois pas loin des journaux pour te relancer à propos de http://linuxfr.org/~mat_/8106.html(...) : j'ai tenté de te joindre par mail à ta redirection dlfp pour te demander où ca en etait et si tu avais publié qqch à ce sujet?

Hésite pas à m'envoyer bouler si je suis lourd.

Re: limiter la memoire pour un utilisateur

Posté par Yann Hirou (page perso, ) le 12/02/2004 à 14:36. (lien). Évalué à 2.

int main()

{

  while(fork()) {};

  while(malloc(1024)) {};

  while(1) {};

}


y a plus court, et tout aussi efficace (testé et approuvé par de nombreux utilisateurs foutus dans la merde avec le programme suivant lancé sur un serveur sur lequel ils étaient connecté...)

int main () {
  while(malloc(1024)){
    fork();
  }
}

  • [^]Re: limiter la memoire pour un utilisateur

    Posté par Olivier G. (page perso, ) le 12/02/2004 à 16:05. (lien). Évalué à 1.

    Pas besoin de C pour ça... Un simple shell suffira:
    :(){ :[:& };:
    A essayer à vos risques et périls.

    • [^]Re: limiter la memoire pour un utilisateur

      Posté par Matthieu C () le 12/02/2004 à 17:17. (lien). Évalué à 1.

      mat@xxxx:~$ :(){ :[:& };:
      [1] 697
      mat@xxxx:~$ -bash: :[:: command not found

      [1]+ Exit 127 :[:

      • [^]Re: limiter la memoire pour un utilisateur

        Posté par Olivier G. (page perso, ) le 12/02/2004 à 23:19. (lien). Évalué à 2.

        oops
        s/[/|/

        Donc je la refais:

        :(){ :|:& };:
        Toujours à vos risques et périls...

        • [^]Re: limiter la memoire pour un utilisateur

          Posté par GCN (Jabber id, page perso, ) le 13/02/2004 à 14:35. (lien). Évalué à 1.

          J'ai deja vu ce truc circuler dans le passé et je me demandais si, éventuellement, tu n'aurais pas un lien à proposer qui expliquerait exactement comment fonctionne cette "commande" en décorticant un peu tout ce bazard ?

          C'est juste pour ma culture perso (et je suis sûr que d'autres personnes se posent les mêmes questions que moi :p) !

          --
          The UNIX way of sex:
          date;cd ~;gunzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep
          • [^]Re: limiter la memoire pour un utilisateur

            Posté par TImaniac (page perso, ) le 13/02/2004 à 16:37. (lien). Évalué à 2.

            en gros du définis une fonction ':' qui se rappelle elle-même dans des processus différents et enfin tu la lance
            J'ai peut être faux je suis pas doué en shell mais bon la syntaxe me fait dire ca :)

  • [^]Re: limiter la memoire pour un utilisateur

    Posté par Matthieu C () le 12/02/2004 à 17:15. (lien). Évalué à 1.

    y a plus court, et tout aussi efficace (testé et approuvé par de nombreux utilisateurs foutus dans la merde avec le programme suivant lancé sur un serveur sur lequel ils étaient connecté...)

    Non car des que le pere atteind la limite maxi de memoire il meurt, ainsi que tout ses fils...

  • [^]Re: limiter la memoire pour un utilisateur

    Posté par Jerome Herman () le 12/02/2004 à 17:37. (lien). Évalué à 1.

    perso je prefere le beaucoup plus drole :

    int main () {
    while(fork()){
    malloc(1);
    }
    }

    1) - Les touts petits mallocs sont presque toujours accordes.
    2) - C'est pas parcequ'il y a plus de memoire qu'il faudrait se priver de creer des processus.
    3) - Des qu'une once de memoire devient disponible c'est pour bibi.

    Bon si on est limite au niveau du nombre de process il peut etre bon d'augmenter un peu le malloc.

    Reccord a battre : 1784 de load

    Kha

    --
    Kha
    root est un privilège, pas un droit !
    • [^]Re: limiter la memoire pour un utilisateur

      Posté par Matthieu C () le 12/02/2004 à 17:58. (lien). Évalué à 1.

      c'est foireux car fork retourne 0 au fils, donc aucun fils ne rentre dans la boucle, n'alloue de memoire : il meurent instantanement et comme le noyeau ne fork pas rellement avant que les 2 processus change ça revient a faire un
      int main () {
      while(1){
      malloc(1);
      }
      }

      pour la charge j'ai reussit a faire du 120 sans insister...

      • [^]Re: limiter la memoire pour un utilisateur

        Posté par Jerome Herman () le 12/02/2004 à 18:07. (lien). Évalué à 2.

        Exact, je sais pas ce que j'ai bu....

        La bonne version est

        while(1){
        while(fork()){
        malloc(1);
        }
        }

        Forcement sans le while(1) initial ca perd beaucoup de son interet...

        Kha

        --
        Kha
        root est un privilège, pas un droit !
        • [^]Re: limiter la memoire pour un utilisateur

          Posté par fabien () le 13/02/2004 à 09:28. (lien). Évalué à 1.

          bien plus simple :

          while(1){
          fork();
          malloc(1);
          }

oupps j'ai mal recopier mon test

Posté par Matthieu C () le 12/02/2004 à 17:59. (lien). Évalué à 1.

s/while(fork()) {};/while(fork() != -1) {};

Revenir en haut de page