sábado, 13 de diciembre de 2008

Memoria SWAP en linux


Cuando tu computadora necesita correr aplicaciones que son mas pesados que tu capacidad de memoria física instalada, los sistemas operativos mas modernos usan una tecnología llamada swapping, en la cual trozos de memoria son temporalmente almacenados en el disco duro mientras que la otra data es movida hacia el espacio de la memoria física Aquí hay algunas técnicas que te pueden ayudar a administrar mejor el swapping en los sistemas Linux y obtener el mejor performance del subsistema swapping de Linux.

Linux divide su memoria RAM en trozos de memoria llamados pages (paginas). Swapping es el proceso en el cual un page de memoria es copiado en el espacio del disco duro preconfigurado, llamado espacio o partición swap, para liberar ese page de memoria. El tamaño combinado de la memoria RAM y la partición swap es la cantidad memoria virtual disponible.

Swapping es necesario por dos importantes razones. Primero, cuando el sistema necesita mas memoria que la RAM es disponible, el kernel intercambia las pages usadas y proporciona mas memoria a la aplicación (proceso) que lo necesita inmediatamente. Segundo, un significante números de pages usadas por una aplicación durante su fase de inicio puede ser solo usada para la inicialización y luego no usada otra vez. El sistema puede intercambiar aquellas pages y liberar la memoria para otra aplicación o incluso para la cache de disco.

Como sea, swapping tiene una desventaja. Comparado a la memoria, el disco es muy lento. La velocidad de la memoria puede ser medida en nanosegundos, mientras que la del disco es medida en milisegundos, por eso acceder al disco puede ser diez veces mas lento que acceder a la memoria física.

Linux tiene dos formas de intercambiar (swap) espacio:
La partición swap y el archivo swap. La partición swap es una sección independiente del disco duro usada únicamente para intercambio. ningún otro archivo puede residir ahí El archivo swap es un archivo especial en el fichero del sistema (filesystems) que reside entre tu sistema y los archivos de datos.
Para ver cuanto espacio de intercambio tienes, usa el comando: swapon -s
Tendras una salida parecida a esta (dependiendo tu equipo):

agentdavid@Alienware:~$ swapon -s
Filename Type Size Used Priority
/dev/sda6 partition 497972 0 -1


Cada linea lista un espacio swap diferente que esta siendo usado por el sistema. Aquí el campo Tipo (Type) indica que este espacio swap es una partición en vez de un archivo y el campo Filename muestra que esta en el disco sda4. El tamaño (Size) esta mostrado en kilobytes, y el campo Used muestra cuantos kilobytes de espacio swap esta siendo usado. El campo Priority le indica a Linux cual es el espacio que debe ser usado primero. Una de las grandes ventajas del swapping en subsistemas Linux es que si montas dos o mas espacios swap (de preferencia en dos dispositivos diferentes) con la misma prioridad, Linux intercalara su actividad de swapping entre ellos, lo cual puede incrementar la performance del swap.


Actualmente las distros basadas en linux ya traen una interfaz durante la instalacion, para asignar la memoria swap, e incluso linux puede asignarlo automaticamente.
Pero siempre es importante entender y conocer como manualmente asignar la medida correcta de swap en nuestro equipo.
En un post futuro platicare acerca de este tema.

Informacion del Sistema en Linux

Sistemas basados en GNU/Linux (Al igual que sus parientes basados en Unix como BSD o los de Macinstosh) conservan la tradición de tener multitud de comandos que permiten conocer el estado del sistema. Es decir, cada uno da pequeñas piezas de información sobre multitud de partes diferentes de lo que esta sucediendo en tu sistema Linux. Algunos de estos comandos pueden ser ejecutados por cualquier usuario y otros varios solo por root. En esta ocasión te presento, sin ningún orden en específico, una recopilación de los más útiles y usados de estos comandos.
  • uname
    Imprime información del sistema
    agentdavid@Alienware:~$ uname -r
    2.6.27-10-generic
    agentdavid@Alienware:~$ uname -a
    Linux Alienware 2.6.27-10-generic #1 SMP Fri Nov 21 12:00:22 UTC 2008 i686 GNU/Linux
    agentdavid@Alienware:~$

  • fdisk
    Permite manipular/crear particiones en Linux, pero tiene una interesante opción de consulta, -l:

    agentdavid@Alienware:~$ fdisk -l

    Disk /dev/sda: 160.0 GB, 160041885696 bytes
    255 heads, 63 sectors/track, 19457 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Disk identifier: 0x0002ecbc

    Device Boot Start End Blocks Id System
    /dev/sda1 * 1 63 506016 83 Linux
    /dev/sda2 64 10261 81915435 83 Linux
    /dev/sda3 10262 18929 69625710 83 Linux
    /dev/sda4 18930 19457 4241160 5 Extended
    /dev/sda5 18930 19457 4241128+ 82 Linux swap / Solaris

    Disk /dev/sdb: 40.0 GB, 40007761920 bytes
    255 heads, 63 sectors/track, 4864 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Disk identifier: 0x000063b0

    Device Boot Start End Blocks Id System
    /dev/sdb1 1 4863 39062016 c W95 FAT32 (LBA)

    Podemos observar en este listado varios aspectos muy útiles, primero que tenemos dos dispositivos conectados al sistema, /dev/sda y /dev/sdb, los dos son discos duros, el primero es el propio del equipo y tiene varias particiones, incluso determinamos cual es la partición de arranque que es /dev/sda1. El segundo dispositivo contiene una partición Windows como podemos ver en la columna 'System' del último renglón 'W95 FAT32', que indiscutiblemente es de Windows, no es una memoria flash por el tamaño (Disk /dev/sdb: 40.0 GB) mostrado. Asi que se trata de un disco duro externo.

  • free
    ¿Sientes tu sistema demasiado lento?, comienza checando con free que despliega como se encuentra de saturada la memoria física RAM y la de la partición SWAP.


    total used free shared buffers cached
    Mem: 2063268 966572 1096696 0 27836 509908
    -/+ buffers/cache: 428828 1634440
    Swap: 497972 0 497972
    agentdavid@Alienware:~$
    La línea 'Mem:' es la memoría fisica RAM, que en este ejemplo tiene 2 GB de los cuáles se están usando 989 megas, bastante razonable todavía, la línea 'Swap:' muestra la partición de swap (lo que en Windows se le conoce como archivo de intercambio), que generalmente se establece al doble de la RAM y que idealmente no debe estar usada, como el ejemplo lo muestra. Cuando tu línea Swap muestra demasiado uso y casi nada libre, tienes serios problemas de rendimiento, considera entonces en incrementar tu RAM. Prueba con free -mt para ver una línea más al final con la suma de las dos Mem + Swap.

  • lsmod
    Muestra el status de los módulos del kernel actualmente cargados en el sistema.


    Module Size Used by
    ipv6 263972 10
    af_packet 25728 2
    i915 38144 2
    drm 86056 3 i915
    binfmt_misc 16904 1
    ppdev 15620 0
    container 11520 0
    pci_slot 12552 0
    sbs 19464 0
    sbshc 13440 1 sbs
    wmi 14504 0
    acpi_cpufreq 15500 0
    cpufreq_powersave 9856 2
    cpufreq_ondemand 14988 0

    .......... (La lista aun sigue...)
  • lspci
    Lista los dispositivos PCI del sistema.


    00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub (rev 03)
    00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03)
    00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03)
    00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)
    00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 02)
    00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 02)
    00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 02)
    00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 02)
    00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 02)
    00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 02)
    00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 02)
    00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)
    00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)
    00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02)
    00:1f.2 IDE interface: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA IDE Controller (rev 02)
    00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)
    02:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02)
    05:07.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller
    05:07.1 FireWire (IEEE 1394): Texas Instruments PCIxx12 OHCI Compliant IEEE 1394 Host Controller
    05:07.2 Mass storage controller: Texas Instruments 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)
    05:07.3 SD Host controller: Texas Instruments PCIxx12 SDA Standard Compliant SD Host Controller
    05:0b.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet (rev 10)
  • lsusb
    Lista los dispositivos usb del sistema.


    Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  • df
    Reporta el uso de espacio en los discos duros.

    agentdavid@Alienware:~$ df
    S.ficheros Bloques de 1K Usado Dispon Uso% Montado en
    /dev/sda5 9843276 4081848 5261408 44% /
    tmpfs 1031632 0 1031632 0% /lib/init/rw
    varrun 1031632 108 1031524 1% /var/run
    varlock 1031632 0 1031632 0% /var/lock
    udev 1031632 2756 1028876 1% /dev
    tmpfs 1031632 232 1031400 1% /dev/shm
    lrm 1031632 2000 1029632 1% /lib/modules/2.6.27-10-generic/volatile
    /dev/sda1 67648684 34771872 32876812 52% /media/Area51
Saludos...

domingo, 30 de noviembre de 2008

Acerca de la arquitectura MVC


El Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos.
El patrón MVC se ve frecuentemente en aplicaciones web, donde la vista es la página HTML y el código que provee de datos dinámicos a la página; el modelo es el Sistema de Gestión de Base de Datos y la Lógica de negocio; y el controlador es el responsable de recibir los eventos de entrada desde la vista.

pero veamoslo mas a detalle:

  • Modelo: Esta es la representación específica de la información con la cual el sistema opera. La lógica de datos asegura la integridad de estos y permite derivar nuevos datos; por ejemplo, no permitiendo comprar un número de unidades negativo, calculando si hoy es el cumpleaños del usuario o los totales, impuestos o importes en un carrito de la compra.
  • Vista: Este presenta el modelo en un formato adecuado para interactuar, usualmente la interfaz de usuario.
  • Controlador: Este responde a eventos, usualmente acciones del usuario e invoca cambios en el modelo y probablemente en la vista.

Muchos sistemas informáticos utilizan un Sistema de Gestión de Base de Datos para gestionar los datos. En MVC corresponde al modelo.

Aunque se pueden encontrar diferentes implementaciones de MVC, el flujo que sigue el control generalmente es el siguiente:

1. El usuario interactúa con la interfaz de usuario de alguna forma (por ejemplo, el usuario pulsa un botón, enlace)

2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificación de la acción solicitada por el usuario. El controlador gestiona el evento que llega, frecuentemente a través de un gestor de eventos (handler) o callback.

3. El controlador accede al modelo, actualizándolo, posiblemente modificándolo de forma adecuada a la acción solicitada por el usuario (por ejemplo, el controlador actualiza el carro de la compra del usuario). Los controladores complejos están a menudo estructurados usando un patrón de comando que encapsula las acciones y simplifica su extensión.

4. El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario. La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario donde se refleja los cambios en el modelo (por ejemplo, produce un listado del contenido del carro de la compra). El modelo no debe tener conocimiento directo sobre la vista. Sin embargo, el patrón de observador puede ser utilizado para proveer cierta indirección entre el modelo y la vista, permitiendo al modelo notificar a los interesados de cualquier cambio. Un objeto vista puede registrarse con el modelo y esperar a los cambios, pero aun así el modelo en sí mismo sigue sin saber nada de la vista. El controlador no pasa objetos de dominio (el modelo) a la vista aunque puede dar la orden a la vista para que se actualice. Nota: En algunas implementaciones la vista no tiene acceso directo al modelo, dejando que el controlador envíe los datos del modelo a la vista.

5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo nuevamente.

Saludos...

Instalar Adobe Reader 8.1.3 en Ubuntu 8.10


En linux existen excelentes visores de documentos PDF, pero si eres de los que quieres disfrutar de la lectura de ficheros PDF, utilizando este clasico programa, ahora es muy sencillo, ya que existe en extencion .DEB:

descargar Adobe con extension .DEB


Encontraras el programa en el menu:

Aplicaciones > Oficina.

Si no usas Ubuntu o Debian, puedes probar a descargar una version para tu distribucion en :

Ver lista de descargas Adobe reader para otras distribuciones
Saludos.

Instalando Oracle 10g Enterprise en Ubuntu 8.10



La versión Express de Oracle 10g si que viene con soporte directo para Ubuntu, pero si por alguna mágica razón necesitas instalar la Enterprise, que solo viene con soporte oficial para Red Hat, SUSE y Oracle Linux.

Vamos a instalar la versión 10.2.0.1.0, así que la puedes ir bajando y desempacando que pesa casi 700MB.

El instalador espera que los binarios de basename y awk esten en /bin y no en /usr/bin, asi que crearemos unos soft links.

sudo ln -s /usr/bin/basename /bin/basename
sudo ln -s /usr/bin/awk /bin/awk

SUSE y Red Hat utilizan el grupo nobody para el usuario nobody, pero los sistemas basados en Debian utilizan el grupo nogroup. Así que creamos el nuevo grupo.

sudo addgroup nobody

Ahora podemos correr el instalador gráfico, pero con un parámetro indicándole que ignore los pre-requisitos, sino detectara que estas utilizando una distribución no soportada oficialmente y cancelara la instalación. Si evitas instalar la base de datos desde este punto y solo instalar las herramientas la instalación durara mucho menos, pero si el tiempo no es problema para ti, créala de una vez y así te ahorras crear el listener y la base de datos manualmente.

./runInstaller -ignoresysprereqs

Al finalizar la instalación, el instalador te pedirá instalar un archivo de bash como root, ejecútalo con sudo tal cual te lo muestra y no tendrás problemas.

Probablemente tengas problemas con librerías faltantes, entonces es muy recomendable incluir las librerías que trae oracle y así te evitas estar compilandolas. Ademas de ejecutarla una vez puedes meterla a tu archivo .bashrc y que se cargue automáticamente cuando inicies sesión.

export LD_LIBRARY_PATH=/path/de/tu/instalacion/lib/

En mi caso también me dio problemas por una librería faltante llamada libaio, pero sin problemas se instala porque se encuentra también en los repositorios de ubuntu.

sudo aptitude install libaio-dev

Listo! Ya tienes una instalación funcional de Oracle 10g Enterprise.

Ojo, que Oracle no te instalara los menús de accesos directos a la diferentes aplicaciones, pero aún asi tienes todo dentro del directorio /bin. Por mencionar algunos comandos útiles:

Para administrar (crear, borrar, editar) listeners y otras herramientas de red, como conectarte a una base de datos externa:

netca

Para administrar tus bases de datos (crear, borrar, etc):

dbca

Para iniciar o parar el database control:

emctl start dbconsole
emctl stop dbconsole

Para iniciar o parar el servicio web de iSQL*Plus:

isqlplusctl start
isqlplusctl stop

Para iniciar o parar listeners:

lsnrctl start
lsnrctl stop

Para entrar a la consola de SQL*Plus

sqlplus

Espero les sea de utilidad, Saludos.

Informaci
ón basada en La guia de Taw's