{"id":8746,"date":"2023-01-09T17:31:45","date_gmt":"2023-01-09T20:31:45","guid":{"rendered":"https:\/\/swiv.com.br\/?p=8746"},"modified":"2026-05-27T20:02:29","modified_gmt":"2026-05-27T19:02:29","slug":"how-to-limit-the-number-of-user-processes-on-oracle-linux-and-solaris","status":"publish","type":"post","link":"https:\/\/swiv.com.br\/index.php\/2023\/01\/09\/how-to-limit-the-number-of-user-processes-on-oracle-linux-and-solaris\/","title":{"rendered":"How to limit the number of User Processes on Oracle Linux and Solaris"},"content":{"rendered":"\n<p>Por motivos de seguran\u00e7a e para racionalizar melhor os recursos computacionais, o instalador do Oracle Database geralmente pede a defini\u00e7\u00e3o de alguns limites ao usu\u00e1rio de S.O que rodar\u00e1 o software. Dentro disso, um dos limites impostos \u00e9 o de n\u00famero de processos que podem ser abertos. \u00c9 um conceito simples, mas vamos demonstrar a implementa\u00e7\u00e3o dessa regra em 2 S.Os diferentes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Oracle Linux<\/h2>\n\n\n\n<p>Vers\u00e3o:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 ~]# cat \/etc\/*release*\nOracle Linux Server release 7.7\nNAME=&quot;Oracle Linux Server&quot;\nVERSION=&quot;7.7&quot;\nID=&quot;ol&quot;\nID_LIKE=&quot;fedora&quot;\nVARIANT=&quot;Server&quot;\nVARIANT_ID=&quot;server&quot;\nVERSION_ID=&quot;7.7&quot;\nPRETTY_NAME=&quot;Oracle Linux Server 7.7&quot;\nANSI_COLOR=&quot;0;31&quot;\nCPE_NAME=&quot;cpe:\/o:oracle:linux:7:7:server&quot;\nHOME_URL=&quot;https:\/\/linux.oracle.com\/&quot;\nBUG_REPORT_URL=&quot;https:\/\/bugzilla.oracle.com\/&quot;\n\nORACLE_BUGZILLA_PRODUCT=&quot;Oracle Linux 7&quot;\nORACLE_BUGZILLA_PRODUCT_VERSION=7.7\nORACLE_SUPPORT_PRODUCT=&quot;Oracle Linux&quot;\nORACLE_SUPPORT_PRODUCT_VERSION=7.7\nRed Hat Enterprise Linux Server release 7.7 (Maipo)\nOracle Linux Server release 7.7\ncpe:\/o:oracle:linux:7:7:server\n<\/pre><\/div>\n\n\n<p>Criando um usu\u00e1rio novo para os testes:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 ~]# useradd swiv\n&#x5B;root@oel7 ~]# passwd swiv\nChanging password for user swiv.\nNew password:\nBAD PASSWORD: The password is shorter than 8 characters\nRetype new password:\npasswd: all authentication tokens updated successfully.\n&#x5B;root@oel7 ~]#\n<\/pre><\/div>\n\n\n<p>\u00c9 poss\u00edvel validar que nesta VM de laborat\u00f3rio, j\u00e1 existia 2 arquivos de limits (para os usu\u00e1rios oracle e grid). Criando mais um para nosso novo usu\u00e1rio:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 etc]# cd security\/limits.d\/\n&#x5B;root@oel7 limits.d]# ll\ntotal 12\n-rw-r--r--. 1 root root  191 Jan 28  2018 20-nproc.conf\n-rw-r--r--. 1 root root 1185 Apr 25  2020 grid-database-preinstall-19c.conf\n-rw-r--r--. 1 root root 1205 Apr 24  2020 oracle-database-preinstall-19c.conf\n&#x5B;root@oel7 limits.d]# touch swiv.conf\n&#x5B;root@oel7 limits.d]#\n<\/pre><\/div>\n\n\n<p>Definindo um limite dentro do arquivo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 limits.d]# cat swiv.conf\nswiv soft nproc 2\nswiv hard nproc 3\n&#x5B;root@oel7 limits.d]#\n<\/pre><\/div>\n\n\n<p>Conectando com o usu\u00e1rio j\u00e1 \u00e9 possivel notar que por termos definido uma quantidade insuficiente (possivelmente pelo S.O abrir outros processos filhos para controle), \u00e9 reportada a mensagem de fork:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2023\/01\/image-15.png\" alt=\"\" class=\"wp-image-8750\"\/><\/figure>\n\n\n\n<p>Definindo novos par\u00e2metros:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 limits.d]# cat swiv.conf\nswiv soft nproc 200\nswiv hard nproc 300\n&#x5B;root@oel7 limits.d]#\n<\/pre><\/div>\n\n\n<p>Agora \u00e9 poss\u00edvel conectar sem mensagens de erro:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2023\/01\/image-16.png\" alt=\"\" class=\"wp-image-8755\"\/><\/figure>\n\n\n\n<p>Outra maneira de fazer esta limita\u00e7\u00e3o \u00e9 editando o arquivo &#8220;\/etc\/security\/limits.conf&#8221;. Para test\u00e1-lo, vou remover o swiv.conf e proceder com o novo teste:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 limits.d]# pwd\n\/etc\/security\/limits.d\n&#x5B;root@oel7 limits.d]# rm -rf swiv.conf\n&#x5B;root@oel7 limits.d]# cd ..\n&#x5B;root@oel7 security]# cat limits.conf  | grep swiv\nswiv soft nproc 2\nswiv hard nproc 3\n&#x5B;root@oel7 security]#\n<\/pre><\/div>\n\n\n<p>Vemos que a limita\u00e7\u00e3o \u00e9 executada na tentativa de login:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2023\/01\/image-17.png\" alt=\"\" class=\"wp-image-8758\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Oracle Solaris<\/h2>\n\n\n\n<p>Vers\u00e3o do S.O:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nroot@solariSWIV:~# cat \/etc\/*release*\nNAME=&quot;Oracle Solaris&quot;\nPRETTY_NAME=&quot;Oracle Solaris 11.4&quot;\nCPE_NAME=&quot;cpe:\/o:oracle:solaris:11:4&quot;\nID=solaris\nVERSION=11.4\nVERSION_ID=11.4\nBUILD_ID=11.4.0.0.1.15.0\nHOME_URL=&quot;https:\/\/www.oracle.com\/solaris\/&quot;\nSUPPORT_URL=&quot;https:\/\/support.oracle.com\/&quot;\n                             Oracle Solaris 11.4 X86\n  Copyright (c) 1983, 2018, Oracle and\/or its affiliates.  All rights reserved.\n                            Assembled 16 August 2018\n<\/pre><\/div>\n\n\n<p>Criando usu\u00e1rio de teste e definindo senha:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nroot@solariSWIV:~# useradd swiv\nroot@solariSWIV:~# passwd swiv\nNew Password:\nRe-enter new Password:\npasswd: password successfully changed for swiv\n<\/pre><\/div>\n\n\n<p>Ao logar com o novo usu\u00e1rio, \u00e9 poss\u00edvel notar um limite j\u00e1 definido:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2023\/01\/image-18.png\" alt=\"\" class=\"wp-image-8762\"\/><\/figure>\n\n\n\n<p>Agora vamos tentar delimitar utilizando o arquivo &#8220;\/etc\/system&#8221;. Em minhas investiga\u00e7oes, cheguei \u00e0 conclus\u00e3o que este par\u00e2metro vale para o S.O como um todo (ou seja, n\u00e3o consigo limitar por usu\u00e1rio). Al\u00e9m disso, um restart \u00e9 necess\u00e1rio. Sendo assim, o que vou fazer \u00e9 apenas para fins did\u00e1ticos, n\u00e3o deve ser executado em ambiente corporativo.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nroot@solariSWIV:~# id swiv\nuid=100(swiv) gid=10(staff)\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nroot@solariSWIV:~# cat \/etc\/system | grep maxusers\n*               set maxusers=40\nset maxusers = 500\nroot@solariSWIV:~#\n<\/pre><\/div>\n\n\n<p>Reinciando o S.O e depois, conectado com o novo usu\u00e1rio, vamos executar o comando abaixo para atingir o limite imposto acima:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nroot@solariSWIV:~# reboot\n\n\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nuid=100(swiv) gid=10(staff)\n-bash-4.4$ : () { :|:&amp;amp; };:\n&#x5B;1] 1353\n-bash-4.4$\n-bash-4.4$ -bash: fork: retry: Resource temporarily unavailable\n-bash: fork: retry: Resource temporarily unavailable\n-bash: fork: retry: Resource temporarily unavailable\n-bash: fork: retry: Resource temporarily unavailable\n-bash: fork: retry: Resource temporarily unavailable\n-bash: fork: retry: Resource temporarily unavailable\n-bash: fork: retry: Resource temporarily unavailable\n-bash: fork: retry: Resource temporarily unavailable\n-bash: fork: retry: Resource temporarily unavailable\n-bash: fork: retry: Resource temporarily unavailable\n-bash: fork: retry: Resource temporarily unavailable\n<\/pre><\/div>\n\n\n<p>Considera\u00e7\u00e3o 1: \u00c9 poss\u00edvel nas vers\u00f5es mais recentes do Oracle Solaris definir alguns limites utilizando o &#8220;Resource Control&#8221;. Em resumo, cria-se uma abstra\u00e7\u00e3o l\u00f3gica chamada &#8220;projects&#8221;, onde pode-se associar com os grupos. E a limita\u00e7\u00e3o \u00e9 feita na camada de projets, e herdada para os grupos e usu\u00e1rios que o comp\u00f5em. Por\u00e9m, os par\u00e2metros para este tipo de cen\u00e1rio n\u00e3o contemplam a quantidade m\u00e1xima de processos.<\/p>\n\n\n\n<p>Considera\u00e7\u00e3o 2: Engajei muito tempo neste cen\u00e1rio do Oracle Solaris, mas ainda n\u00e3o estou plenamente convicto que estou com o entendimento pleno. Caso tenha falhado em alguma informa\u00e7\u00e3o, e tenha algum colega com alguma considera\u00e7\u00e3o, eu agradeceria!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Por motivos de seguran\u00e7a e para racionalizar melhor os recursos computacionais, o instalador do Oracle Database geralmente pede a defini\u00e7\u00e3o de alguns limites ao usu\u00e1rio de S.O que rodar\u00e1 o software. Dentro disso, um dos limites impostos \u00e9 o de n\u00famero de processos que podem ser abertos. \u00c9 um conceito simples, mas vamos demonstrar a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-8746","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/8746","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=8746"}],"version-history":[{"count":1,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/8746\/revisions"}],"predecessor-version":[{"id":9028,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/8746\/revisions\/9028"}],"wp:attachment":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=8746"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=8746"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=8746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}