Journal limiter la memoire pour un utilisateur

Posté par  .
Étiquettes : aucune
0
12
fév.
2004
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) {};
}
  • # Re: limiter la memoire pour un utilisateur

    Posté par  . Évalué à 2.

    man bash
    /ulimit
    ulimit -u

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

      Posté par  . É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....
  • # [HS]

    Posté par  . É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  . É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  . É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  . Évalué à 1.

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

        [1]+ Exit 127 :[:
        • [^] # Re: limiter la memoire pour un utilisateur

          Posté par  . Évalué à 2.

          oops
          s/[/|/

          Donc je la refais:

          :(){ :|:& };:
          Toujours à vos risques et périls...
          • [^] # Re: limiter la memoire pour un utilisateur

            Posté par  (site web personnel) . É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) !
    • [^] # Re: limiter la memoire pour un utilisateur

      Posté par  . É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  . É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
      • [^] # Re: limiter la memoire pour un utilisateur

        Posté par  . É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...
  • # oupps j'ai mal recopier mon test

    Posté par  . Évalué à 1.

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

Suivre le flux des commentaires

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