{"id":194,"date":"2008-02-09T14:00:00","date_gmt":"2008-02-09T16:00:00","guid":{"rendered":"http:\/\/www.soudba.com.br\/?p=194"},"modified":"2008-02-09T14:00:00","modified_gmt":"2008-02-09T16:00:00","slug":"entendendo-semaforos-numero-maximo-de-arquivos-manipulado-pelo-usuario","status":"publish","type":"post","link":"https:\/\/www.soudba.com.br\/?p=194","title":{"rendered":"Entendendo semaforos,  n\u00famero m\u00e1ximo de arquivos manipulado pelo usu\u00e1rio.."},"content":{"rendered":"<p>A mem\u00f3ria compartilhada e os sem\u00e1foros s\u00e3o dois itens importantes, sem eles a instancia nao inicia e em consequencia o banco de dados nao abrir\u00e1.<\/p>\n<p><span style=\"font-size:100%;\"><span style=\"font-weight:bold;\">Mem\u00f3ria compartilhada<\/span><br \/><\/span><br \/>Assim: Mem\u00f3ria compartilhada como o nome mesmo diz, \u00e9 o local de mem\u00f3ria onde ela pode ser compartilhada entre diferentes processos. O oracle utiliza essa area de memoria para a implementar a SGA (System Global Area), da qual precisa estar visivel para todas as sessoes de banco de dados. Por isso as vezes o administrador apesar de ter mem\u00f3ria disponivel nao consegue alocar uma SGA maior, necessita configurar os parametros de memoria para que a SGA v\u00e1 at\u00e9 estes limites impostos pelo sistema operacional.<\/p>\n<p>Um erro comum por exemplo no banco postgree por falta de memroia compartilhada \u00e9: <\/p>\n<pre>  Out of Memory: Killed process 12345 (postmaster).<br \/><\/pre>\n<p> A partir do kernel 2.6, opadr\u00e3o \u00e9 que n\u00e3o haja &#8220;sobre-utiliza\u00e7\u00e3o&#8221;. Caso esteja desativado, pode ser implementado selecionando um modo restrito de sobre-utiliza\u00e7\u00e3o atrav\u00e9s do sysctl: <\/p>\n<pre>  [root]# sysctl -w vm.overcommit_memory=2<br \/><\/pre>\n<p> Aproveitando o espa\u00e7o, e como estava com as defini\u00e7\u00f5es em m\u00e3os, segue descritivo referencia para facilitar a configura\u00e7\u00e3o (quando necess\u00e1rio) desses par\u00e2metros: <\/p>\n<h3><span style=\"font-size:85%;\">SHMMAX<\/span><\/h3>\n<p> Tamanho m\u00e1ximo de um segmento de mem\u00f3ria compartilhada (bytes). 250 kB + 8.2 kB * shared_buffers + 14.2 kB * max_connections at\u00e9 o infinito. <\/p>\n<h3><span style=\"font-size:85%;\">SHMMIN<\/span><\/h3>\n<p> Tamanho m\u00ednimo de um segmento de mem\u00f3ria compartilhada (bytes). Padr\u00e3o 1. <\/p>\n<h3><span style=\"font-size:85%;\">SHMALL<\/span><\/h3>\n<p> Quantidade total de mem\u00f3ria compartilhada dispon\u00edvel (bytes ou p\u00e1ginas) <\/p>\n<h3><span style=\"font-size:85%;\">SHMSEG<\/span><\/h3>\n<p> N\u00famero m\u00e1ximo de segmentos de mem\u00f3ria compartilhada por processo. Somente 1 segmento \u00e9 necess\u00e1rio, mas o padr\u00e3o \u00e9 muito maior. <\/p>\n<h3><span style=\"font-size:85%;\">SHMMNI<\/span><\/h3>\n<p> N\u00famero m\u00e1ximo de segmentos de mem\u00f3ria compartilhada para todo o sistema. <\/p>\n<p><span style=\"font-size:130%;\">Sem\u00e1foros<br \/><\/span><br \/>Os sem\u00e1foros sao sinais que podem estar ligados ou desligados indicando que este processo ainda nao finalizou sua tarefa. Veja, os semaforos existem para que nao sejam sobrepostas as opera\u00e7\u00f5es executadas pelos processos. Imagina a copia em paralelo de um arquivo do arquivo do word se os dois ao mesmo tempo serem gravados no mesmo local com mesmo nome o que ocorrer\u00e1 ? Existe ai um conflito para utilizacao do nome do arquivo, do espa\u00e7o em disco, portanto um semaforo resolveria essa questao sinalizando um processo para que ele aguarde ate que o outro termine a sua opera\u00e7\u00e3o. Um processo pode ter uma sinaliza\u00e7\u00e3o de ligado ou desligado,  isso na verdade servir\u00e1 como uma forma de controle de eventos e processos para que a SGA do Oracle consiga controlar toda a concorrencia de escrita e leitura na memoria compartilhada.<\/p>\n<p><span style=\"font-size:100%;\"><span style=\"font-weight:bold;\">Verifica\u00e7\u00e3o de instala\u00e7\u00e3o:<\/span><br \/><\/span><br \/>Inicie sua jornada usando o comando abaixo:<\/p>\n<pre>[root]# ipcs -la<br \/>----- Limites da mem\u00f3ria compartilhada ----------<br \/>n\u00famero m\u00e1ximo de segmentos: 4096<br \/>tamanho m\u00e1ximo do segmento (Kb): 2097152<br \/>mem\u00f3ria compartilhada total m\u00e1xima (Kb): 8388608<br \/>tamanho m\u00ednimo do segmento (bytes): 1<br \/><br \/>------ Limites de sem\u00e1foro ----------------------<br \/>n\u00famero m\u00e1ximo de arrays: 100<br \/>m\u00e1ximo de sem\u00e1foros por array: 100<br \/>m\u00e1ximo geral de sem\u00e1foros do sistema: 32000<br \/>m\u00e1ximo de ops por chamada semop: 100<br \/>valor m\u00e1ximo de sem\u00e1foro: 32767<br \/><br \/>------ Mensagens: limites -----------------------<br \/>n\u00famero m\u00e1ximo geral de filas no sistema: 16<br \/>tamanho m\u00e1ximo da mensagem (bytes): 8192<br \/>tamanho m\u00e1ximo padr\u00e3o da fila (bytes): 16384<\/pre>\n<p>Para o Oracle 10G, estes valores podem variar de acordo com release e vers\u00e3o:<\/p>\n<p>echo 100 32000 100 100 &gt; \/proc\/sys\/kernel\/sem<\/p>\n<p>Depois confirme com o comando cat:<\/p>\n<p>cat \/proc\/sys\/kernel\/sem<\/p>\n<p>Precisamos tamb\u00e9m aumentar o numero m\u00e1ximo de arquivos manipulados pelo usu\u00e1rio, para 131072:<\/p>\n<p>echo 131072 &gt; \/proc\/sys\/fs\/file-max<br \/>ulimit -n 131072<\/p>\n<p>Aumentar as portas disponiveis no servidor:<\/p>\n<p>echo 1024 65000 &gt; \/prco\/sys\/net\/ipv4\/ip_local_port_range<\/p>\n<p>Aumentar o numero m\u00e1ximo de processos que podem ser controlados pelo usuario, para 16384.<br \/>com o ulimit -a  voce consegue verificar como o seu sistema esta atualmente.<\/p>\n<p>ulimit -u 16384<\/p>\n<p>Alterar diretamente no parametro do kernel, veja essa mudanca nao \u00e9 permanente.<br \/>echo 65536 &gt; \/proc\/sys\/fs\/file-max<\/p>\n<p>Essa agora sim, a cada boot \u00e9 lido novamente o arquivo sysctl.conf, se quiser confira os demais parametros editando o arquivo sysctl.conf com o vi.<\/p>\n<p>echo fs.file-max=65536 &gt;&gt; \/etc\/sysctl.conf<\/p>\n<p>E depois o numero de processos controlados pelo usuario oracle no servidor.<\/p>\n<p>Eu aconselho colocar esse comando no profile comum que fica em \/etc\/profile.sh ou no bash_profile do usuario.  Outra dica \u00e9 colocar no arquivo  \/etc\/security\/limits.conf<\/p>\n<p>ficando assim:<\/p>\n<p>oracle           soft    nofile          63536<br \/>oracle           hard    nofile          63536<\/p>\n<p>Duas dicas interessantes:<\/p>\n<p>NOTE:  It is also possible to query the current usage of file handles using the following command:<\/p>\n<p># cat \/proc\/sys\/fs\/file-nr<br \/>1140    0       103062<\/p>\n<p>In the above example output, here is an explanation of the three values from the file-nr command:<\/p>\n<p> * Total number of allocated file handles.<br \/> * Total number of file handles currently being used.<br \/> * Maximum number of file handles that can be allocated. This is essentially the value of file-max &#8211; (see above).<\/p>\n<p>NOTE: If you need to increase the value in \/proc\/sys\/fs\/file-max, then make sure that the ulimit is set properly. Usually for 2.4.20 it is set to unlimited. Verify the ulimit setting my issuing the ulimit command:<\/p>\n<p># ulimit<br \/>unlimited<\/p>\n<p>Lembre-se o comportamento tanto da manipula\u00e7\u00e3o dos arquivos quanto dos processos pode ser diferente quanto ao metodo de login, portanto SSH, login via terminal poder\u00e3o ter limites diferentes.<\/p>\n<p>Confirme tudo com o comando<\/p>\n<p>sysctl -p<\/p>\n<p>ou ainda para confirmar os arquivos separadamente, ou seja nao precisa de boot:<\/p>\n<p>sysctl -w fs.file-max=65536<\/p>\n<p>Bom, de tudo eu li a informa\u00e7\u00e3o no site do puschitz tamb\u00e9m, mas ta confuso visto que ele mexe no mesmo parametro duas vezes no mesmo arquivo \/etc\/security\/limits.conf tanto para o numero de processos quanto para o numero de arquivos.<br \/>Veja em http:\/\/www.puschitz.com\/TuningLinuxForOracle.shtml<\/p>\n<p>Resumo &#8211; Execute os comandos como root:<\/p>\n<p>echo &#8220;kernel.sem=250 32000 100 128&#8221; &gt;&gt; \/etc\/sysctl.conf<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A mem\u00f3ria compartilhada e os sem\u00e1foros s\u00e3o dois itens importantes, sem eles a instancia nao inicia e em consequencia o banco de dados nao abrir\u00e1. Mem\u00f3ria compartilhadaAssim: Mem\u00f3ria compartilhada como o nome mesmo diz, \u00e9 o local de mem\u00f3ria onde &hellip; <a href=\"https:\/\/www.soudba.com.br\/?p=194\">Continue lendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[106,137,271,272,273,274],"tags":[],"class_list":["post-194","post","type-post","status-publish","format-standard","hentry","category-file-max","category-ip_local_port_range","category-semmni","category-semmns","category-semmsl","category-semopm"],"_links":{"self":[{"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=\/wp\/v2\/posts\/194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=194"}],"version-history":[{"count":0,"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=\/wp\/v2\/posts\/194\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}