miércoles, 19 de marzo de 2014

Renombrar ^M en linux

Dejo este comando que sirve para renombrar el caracter ^M en los archivos editados en windows y copiados a linux. Basta con editar el fichero en linux con el vi, poner dos puntos y poner el carácter ^M con la secuencia Crt+V Crt+M.

[root@procesos]# vi actualizacionCalificaciones.sh
:%s/^M//g


fork: Resource temporarily unavailable

Todos los usuarios en linux tienen asignados un número de procesos máximo que puede tener en ejecución de manera simultánea. Cuando llegamos al máximo de procesos lanzados, el sistema nos lanzará un error del tipo fork: retry: Resource temporarily unavailable o fork: Resource temporarily unavailable.
Podemos comprobar el número de procesos simultáneos que puede tener un usuario, lanzando el comando ulimit -u, dado un resultado como este:


[user@sr ~]$ ulimit -u
1024

Cuando el usuario user tenga 1025 procesos simultáneos lanzados y quiera lanzar uno más, dará un error fork: Resource temporarily.
Para aumentar esto, tendremos que editar el fichero /etc/security/limits.conf e incluir al final las siguientes lineas:

user    hard  nproc    16384
user    soft  nproc    16384

Donde 16384 es el número de procesos simultáneos  máximo. Tras reiniciar la máquina, loggarnos con el usuario user y lanzar el comando ulimit -u este nos dará el siguiente resultado:

[user@sr ~]$ ulimit -u
16384
Para hacer esto, hay otra manera más rupestre, que es lanzar lo siguiente:
[root@server ~]# ulimit -u 16384
Al realizarlo, el número máximo de procesos simultáneos se modifica a 16384 pero solo para la sesión en curso, si queremos que esto sea persistente para un usuario podríamos meter el comando ulimit -u 16384 en el .bashrc de cada usuario pero esto complica mucho la manera estándar de hacerlo y confunde la administración del servidor.

Además pongo un comando que os indicará para todos los usuarios del sistema los procesos activos que tienen:

ps -A -o pid,thcount,user,comm |tail -n +2|awk '{print $3" " $2}' | awk ' {arr[$1]+=$2} END {for (i in arr) {print  arr[i],i}}'

La salida será similar a esta:

[root@sr bin]# ps -A -o pid,thcount,user,comm |tail -n +2|awk '{print $3" " $2}' | awk ' {arr[$1]+=$2} END {for (i in arr) {print  arr[i],i}}'
17 gdm
1 ntp
1 rpc
1 dbus
3 68
3 rtkit
2 postfix
1 rpcuser
664 root

Donde el primer campo corresponde a los procesos activos y el segundo al nombre del usuario.

martes, 11 de marzo de 2014

Descriptores de ficheros Linux

Cuando trabajamos con servidores de aplicaciones como apache o bases de datos como Oracle necesitamos aumentar el número de descriptores de fichero de nuestros sistemas. Por defecto en Red Hat tenemos 1024 para cada usuario del sistema y lo recomendado por Oracle para sus bases de datos es 65536. Para comprobar los descriptores de ficheros que tenemos disponibles para un usuario basta con lanzar lo siguiente:

[root@server ~]# ulimit -n
1024

Esto nos indica que para el usuario root tenemos 1024 descriptores de fichero.
Para aumentarlo hasta 65536 basta con comprobar que en el fichero /proc/sys/fs/file-max tenemos configurado como mínimo el número 65536 que hace referencia a los descriptores máximos posibles del sistema.

Una vez verificado esto tenemos que modificar el fichero /etc/security/limits.conf, donde designaremos la cantidad de descriptores de ficheros que puede tener usar cada usuario. Por defecto ese fichero no contiene nada, yo por defecto, teniendo en cuenta que esto es para el usuario root lo completo con lo siguiente (tendremos que cambiar el usuario dependiendo de nuestras necesidades).

*      hard  nofile   65536
*      soft  nofile   65536
root   hard  nofile   65536
root   soft  nofile   65536


Para hacer esto, hay otra manera más rupestre, que es lanzar lo siguiente:
[root@server ~]# ulimit -n 65536
Al realizarlo, el número máximo de descriptores se modifica a 65536 pero solo para la sesión en curso, si queremos que esto sea persistente para un usuario podríamos meter el comando ulimit -n 65536 en el .bashrc de cada usuario pero esto complica mucho la manera estándar de hacerlo y confunde la administración del servidor.