Soy administrador (sysadmin) de varios sistemas en GC (Google Clould) y uno de los sistemas que administro es una instancia de Koha (Sistema integral de gestión bibliotecaria) en una plataforma GCE (Google Compute Engine).
Al monitorizar el sistema Koha, el uso del CPU de la instancia estaba siempre al 100% de su capacidad, lo cual causaba molestia a los usuarios debido a que el sistema estaba demasiado lento.
Al revisar las causas, encontré que esto se debe a web crawlers los cuales hacen búsquedas en el catálogo de Koha para poder indexar resultados, la búsqueda de soluciones me llevo a este wiki de Koha para poder realizarle un tuning (afinamiento) al sistema.
https://wiki.koha-community.org/wiki/Koha_Tuning_Guide
Esta guía ayudo a muchos, pero en mi caso no, los web crawlers seguian accediendo a pesar de agregar el archivo " robots.txt ".
La forma de solucionarlo fue creando (en mi caso) el archivo .htaccess con este archivo de configuraron del servidor Apache logre detener los web crawlers el uso de este archivo de configuración, puede traer repercusiones a tu servidor, en el caso de eficiencia y tiempo de espera, pero para una instancia pequeña como la que administro es perfecta.
Usando esta lista:
http://www.robotstxt.org/db.html
y este generador de archivo .htaccess en esta página http://incredibill.me/htaccess-block-user-agent
ya con el archivo creado, simplemente resto ponerlo en la carpeta www de apache y reiniciar el servidor, con esto se arreglo el problema de los web crawlers que alentaban el procesador y las búsquedas en mi instancia de Koha.
Espero que esta información les sea de ayuda a quien logre encontrar esta entrada.
Aquí podrás encontrar mis apuntes. lo cuales compartiré con el mundo.
jueves, 28 de julio de 2016
martes, 10 de mayo de 2016
Escribir un archivo en Java,
public void archivoSalida(String texto) throws IOException {
String ruta = "hola.txt";
File archivo = new File(ruta);
BufferedWriter bw;
if(archivo.exists()) {
bw = new BufferedWriter(new FileWriter(archivo, true));
bw.write(texto);
} else {
bw = new BufferedWriter(new FileWriter(archivo));
bw.write(texto);
}
bw.close();
}
Este método recibe un String para poder escribirlo en un archivo, sí el archivo existe lo abre y escribe, no borra el contenido del archivo solo escribe la final, esto se logra con el segundo parámetro del constructor del FileWrite al cual se le envía TRUE para escribir y FALSE para sobrescribir
sí el archivo no existe lo crea y escribe en el.
String ruta = "hola.txt";
File archivo = new File(ruta);
BufferedWriter bw;
if(archivo.exists()) {
bw = new BufferedWriter(new FileWriter(archivo, true));
bw.write(texto);
} else {
bw = new BufferedWriter(new FileWriter(archivo));
bw.write(texto);
}
bw.close();
}
Este método recibe un String para poder escribirlo en un archivo, sí el archivo existe lo abre y escribe, no borra el contenido del archivo solo escribe la final, esto se logra con el segundo parámetro del constructor del FileWrite al cual se le envía TRUE para escribir y FALSE para sobrescribir
sí el archivo no existe lo crea y escribe en el.
miércoles, 24 de febrero de 2016
VBox: Kernel driver not installed (rc=-1908)
En linux me dio la casualidad que queria correre una maquina virtual en VBox y resulto el siguiente error
"The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing
'/etc/init.d/vboxdrv setup'
as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary."
Bueno lo que leei que se usa para arreglarlo, es desintalar el viejo VBox e instlarlo de nuevo
"The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing
'/etc/init.d/vboxdrv setup'
as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary."
Bueno lo que leei que se usa para arreglarlo, es desintalar el viejo VBox e instlarlo de nuevo
sudo apt-get install linux-headers-generic build-essential dkms
sudo apt-get remove virtualbox-dkms
sudo apt-get install virtualbox-dkms
Etiquetas:
apt-get,
error,
linux,
VBox,
Virtual box
viernes, 29 de enero de 2016
Vaciar papelera por completo en Linux
Para que este blog no se oxide, aquí el comando que utilice para vaciar la papelera con un archivo que no se dejaba borrar.
$ sudo rm -rf ~/.local/share/Trash/files/*
lunes, 4 de enero de 2016
Evitar que el SSH hacia instancia GCE se rompa.
Feliz 2016 a todos =)
En mi experiencia con GCE (Google Compute Engine) he tenido la mala fortuna que al realizar una tarea larga como un "dd" para hacer el respaldo del disco duro o al comprimir el imagen que crear el "dd" el SSH después de un rato de inactividad me marca:
Bueno lo que he estado utilizando y me ha ayudado no solo a evitar el broken pipe si no también para poder darme cuenta de lo que hace la maquina es utilizar:
pv es un comando con el cual podemos añadir una barra de progreso a esos comandos que no cuentan con un modificador o bandera para activar la barra de progreso.
1.- Para usarlo es necesario instalarlo si no se tiene
2.- Para usar pv con dd se utiliza el siguiente comando
3.- Para utlizar pv con pigz
Con eso obtendrás una barra de progreso similar a esta
Con esto evité el broken pipe.
En mi experiencia con GCE (Google Compute Engine) he tenido la mala fortuna que al realizar una tarea larga como un "dd" para hacer el respaldo del disco duro o al comprimir el imagen que crear el "dd" el SSH después de un rato de inactividad me marca:
Write failed: Broken pipe
ERROR: (gcloud.compute.ssh) [/usr/local/bin/ssh] exited with return code [255].
Bueno lo que he estado utilizando y me ha ayudado no solo a evitar el broken pipe si no también para poder darme cuenta de lo que hace la maquina es utilizar:
pv es un comando con el cual podemos añadir una barra de progreso a esos comandos que no cuentan con un modificador o bandera para activar la barra de progreso.
1.- Para usarlo es necesario instalarlo si no se tiene
$ sudo apt-get install pv
2.- Para usar pv con dd se utiliza el siguiente comando
$ sudo dd if=/dev/disk/by-id/google-temp |pv|sudo dd of=/mnt/tmp/disc.img bs=5M
3.- Para utlizar pv con pigz
$ pv -tpreb /archivo/a/comprimir | pigz -k --best > comprimido.gz
Con eso obtendrás una barra de progreso similar a esta
17.4GB 0:11:28 [35.5MB/s] [====> ] 7% ETA 2:25:52
Con esto evité el broken pipe.
sábado, 19 de diciembre de 2015
Manejo de excepciones en jsp
Primero debemos saber bien que es una excepción y su manejo y para ello aqui esta este link de wikipedia
https://es.wikipedia.org/wiki/Manejo_de_excepciones
Ahora ya que recordamos o conocemos que es una excepción procedemos a su manejo en tiempo de ejecución en una aplicación web con jsp.
En mi caso se ha creado una excepción que controla si un usuario esta esta loggeado o no.
-----------------------------------------------------------------------------------
public class ErrorLoggeo extends Exception {
public ErrorLoggeo(String e) {
super(e);
}
}
-----------------------------------------------------------------------------------
Ahora iremos al scriptlet que controla el jsp para manejar esa excepción:
-------------------------------------------------------------------------------------------------------------
public static queryUser(String id_usuario) throws ErrorLoggeo {
...
if (userService.getCurrentUser() == null){
throw new ErrorLoggeo("Usuario no registrado");
}
...
}
--------------------------------------------------------------------------------------------------------------
Ahora en tu archivo jsp, vamos a cachar esta excepción que creamos y la redirigimos a una pagina de error la cual sirve para advertir el error y ejecutar la acción prudente para manejarlo.
-------------------------------------------------------------------------------------------------------------------------
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<%
String id_usuario = request.getParameter("id");
String usuario = null;
try{
usuario = queryUser(id_usuario);
}catch(ErrorLoggeo e){
String redirectURL = "/jsp/error.jsp";
response.sendRedirect(redirectURL);
}
%>
<head>
<link rel="...
--------------------------------------------------------------------------------------------------------------------------
Con esto pasos ya solo debemos hacer las correcciones pertinentes en la pagina de error para así controlar correctamente este tipo de errores.
Hay otras formas de controlar las excepciones desde el web.xml pero ya lo pondré en otra entrada.
Por cierto Guillermo L. R. autor de este blog, les desea felices Fiestas.
Etiquetas:
code,
excepciones,
exceptions,
java,
jsp,
manejo
martes, 1 de diciembre de 2015
Otra forma de respaldar VM de GCE a dispositivo local
Esta forma es muy parecida a la anteriormente publicada, solo cambia en algunos puntos, pero a mi parecer esta forma es mas controlada y te da mas seguridad de que se esta respaldando todo el disco duro.
1.- Crear un disco duro del doble de capacidad del que se quiere respaldar, esto con la finalidad de poder guardar la imagen del disco duro a respaldar de manera holgada en el disco duro nuevo creado.
2.- Cuando se tenga el nuevo disco duro hay que entrar a la instancia de GCE para montar el nuevo disco en nuestro SO.
Revisar que discos duros se encuentran disponibles
3.- Ahora lo que se hace es una copia entera del nuestro disco duro al nuevo montado
4.- El proceso anterior tardara unos minutos (en mi caso fueron 60 min) y ahora solo resta comprimir ese archivo y descargarlo (en la compresión del archivo me llevo 70 min)
Puedes usar pigz para hacer una compresión mas pequeña
5.- Ahora solo descarga el archivo y así tendrás una copia de tu DD mas controlada.
1.- Crear un disco duro del doble de capacidad del que se quiere respaldar, esto con la finalidad de poder guardar la imagen del disco duro a respaldar de manera holgada en el disco duro nuevo creado.
2.- Cuando se tenga el nuevo disco duro hay que entrar a la instancia de GCE para montar el nuevo disco en nuestro SO.
Revisar que discos duros se encuentran disponibles
$ ls -l /dev/disk/by-id/google-*Hacer la carpeta donde se va a montar el nuevo disco duro
$ sudo mkdir /mnt/tmpMontar el disco duro donde se guardara el respaldo
$ sudo /usr/share/google/safe_format_and_mount -m "mkfs.ext4 -F" /dev/sdb /mnt/tmp
3.- Ahora lo que se hace es una copia entera del nuestro disco duro al nuevo montado
$ dd if=/dev/disk/by-id/[Nuestro disco duro a copiar] of=/mnt/temp/backup/disk.img bs=5M
4.- El proceso anterior tardara unos minutos (en mi caso fueron 60 min) y ahora solo resta comprimir ese archivo y descargarlo (en la compresión del archivo me llevo 70 min)
Puedes usar pigz para hacer una compresión mas pequeña
5.- Ahora solo descarga el archivo y así tendrás una copia de tu DD mas controlada.
Etiquetas:
app,
cloud,
comandos,
command,
compute,
computeengine,
copy,
disco duro,
engine,
export,
exportar,
google,
hardrive,
linux,
ubuntu,
VM
Suscribirse a:
Entradas (Atom)
