Solución de problemas de inicio de sesión

Si no puede conectarse a una instancia de Oracle Linux en Oracle Cloud Infrastructure, revise la siguiente información.

La conexión a una instancia de Oracle Linux falla con un error "fork: retry: Resource temporalmente no disponible"

El error fork failed: Resource temporalmente unavailable en Oracle Linux suele indicar que el sistema no puede crear nuevos procesos debido a limitaciones de recursos, como una tabla de procesos completa, memoria insuficiente o que ha alcanzado los límites del usuario o del sistema.

Causas potenciales

  • Se han alcanzado los límites de recursos de usuario o del sistema: un usuario puede tener un límite en el número de procesos que puede crear o en el número de archivos abiertos que puede tener. O bien, es posible que el sistema no pueda crear nuevos procesos porque se está quedando sin recursos o ha alcanzado su número máximo de procesos.
  • Memoria insuficiente del sistema o espacio de intercambio: es posible que el sistema no tenga suficiente memoria o espacio de intercambio para asignar a nuevos procesos.
  • Un servicio o proceso de mal comportamiento: un proceso o servicio fuera de control podría estar consumiendo recursos excesivos, lo que impide que se inicien nuevos procesos.
  • Hay demasiados descriptores de archivos abiertos: es posible que el sistema no pueda abrir nuevos archivos porque ha alcanzado el número máximo de descriptores de archivos abiertos.
  • Configuración incorrecta o error en el archivo /etc/security/limits.conf: si hay una configuración incorrecta o un error en el archivo limits.conf, es posible que no se apliquen los valores más altos y que una cuenta de usuario alcance un límite por defecto que dispare el error.

Solución de problemas de

  • Supervisar el uso de recursos e identificar y terminar procesos innecesarios para liberar memoria y espacio de intercambio
    • Utilice top o vmstat para identificar procesos que consumen mucha CPU o memoria, por ejemplo:
      $ vmstat
      
      procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
      r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
      1  0      0 12607316   4336 2737552    0    0   109   302  182  267  3  1 96  0  0
      
      $ top
      
      top - 16:04:04 up  1:07,  2 users,  load average: 0.01, 0.13, 0.10
      Tasks: 180 total,   1 running, 179 sleeping,   0 stopped,   0 zombie
      %Cpu(s):  0.0 us,  0.2 sy,  0.2 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
      MiB Mem :  15700.7 total,  12305.2 free,    717.2 used,   2678.4 buff/cache
      MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.  14673.0 avail Mem
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      12331 opc       20   0   54424   5040   4252 R   0.7   0.0   0:00.07 top
      11972 root      30  10 2095708 292468 123100 S   0.3   1.8   0:05.65 wlp-agen+
      ...
    • Utilice ps aux para mostrar todos los procesos y su uso de recursos, por ejemplo:
      $ ps aux
      
      USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
      root           1  0.1  0.1 179460 17548 ?        Ss   14:56   0:04 /usr/lib/syste
      root           2  0.0  0.0      0     0 ?        S    14:56   0:00 [kthreadd]
      root           3  0.0  0.0      0     0 ?        I<   14:56   0:00 [rcu_gp]
      root           4  0.0  0.0      0     0 ?        I<   14:56   0:00 [rcu_par_gp]
      ...
    • Termine los procesos que ya no sean necesarios o que causen problemas con kill <PID> o kill -9 <PID>, por ejemplo:
      [opc@<oracle-linux-instance-name> ~]$ kill -9 12346
  • Comprobar y ajustar los límites de recursos de usuario
    • Utilice ulimit -a para comprobar los límites de usuario actuales, por ejemplo:
      $ ulimit -a
      
      core file size          (blocks, -c) 0
      data seg size           (kbytes, -d) unlimited
      scheduling priority             (-e) 0
      file size               (blocks, -f) unlimited
      pending signals                 (-i) 62425
      max locked memory       (kbytes, -l) 64
      max memory size         (kbytes, -m) unlimited
      open files                      (-n) 1024
      ...
    • Utilice ulimit para aumentar temporalmente un límite. Por ejemplo, para aumentar temporalmente el número de archivos abiertos que puede tener un usuario, utilice ulimit -n <number>:
      $ ulimit -n 2096
      
      $ ulimit -a
      
      core file size          (blocks, -c) 0
      data seg size           (kbytes, -d) unlimited
      scheduling priority             (-e) 0
      file size               (blocks, -f) unlimited
      pending signals                 (-i) 62425
      max locked memory       (kbytes, -l) 64
      max memory size         (kbytes, -m) unlimited
      open files                      (-n) 2096
      ...
    • Compruebe que el archivo /etc/security/limits.conf tenga el formato correcto, que no haya errores de escritura y que los valores definidos para una cuenta de usuario sean los esperados. Si hay una configuración o error incorrectos, es posible que el sistema no aplique valores más altos y que una cuenta de usuario alcance un límite predeterminado que dispare el error.

      Por ejemplo, la siguiente es una entrada correcta en el archivo /etc/security/limits.conf para definir el número máximo de procesos para un solo usuario o para todos los usuarios:

      #<domain>      <type>  <item>         <value>
      
      *                hard    nproc           2048
      oracle           hard    nproc           65356
      root             hard    nproc           unlimited
      Nota

      El archivo limits.conf se puede utilizar para definir límites de usuario personalizados para diferentes recursos del sistema en lugar de utilizar los límites por defecto del sistema. Consulte la página del manual de limits.conf(5) para obtener más información.
  • Aumento de los límites del sistema
    • Edite /etc/sysctl.conf para aumentar los límites de todo el sistema. Por ejemplo, para definir el número máximo de archivos abiertos:
      fs.file-max = 204708
    • Reinicie el sistema para que los cambios surtan efecto.
  • Comprobar problemas de memoria
    • Utilice free -h para comprobar el uso de memoria actual y el espacio de intercambio, por ejemplo:
      $ free -h
      total        used        free      shared  buff/cache   available
      Mem:           15Gi       727Mi        11Gi        16Mi       2.8Gi        14Gi
      Swap:         4.0Gi          0B       4.0Gi
    • Si la memoria es baja, considere aumentar el espacio de intercambio o actualizar la RAM.