sábado, 25 de septiembre de 2010

MySQL 5.1: Desempeño de MySQL con mysqlslap

Esta estamos trabajando con MySQL, necesito poner a operar un servidor con MySQL para la empresa, como ya vieron la base de datos es MySQL 5.1.

Para esto existen muchas herramientas para esto, pero esta vez nos vamos a enforcar sobre:

mysqlslap

Viene por default cuando instalas mysql, estoy trabajando sobre Centos 5.5 en una maquina virtual con Xen:

uname -a
Linux 2.6.18-194.11.3.el5xen #1 SMP Mon Aug 30 16:55:32 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

La version de MySQL es:

MySQL-client-community.x86_64 5.1.50-1.rhel5 installed
MySQL-devel-community.x86_64 5.1.50-1.rhel5 installed
MySQL-server-community.x86_64 5.1.50-1.rhel5 installed
MySQL-shared-compat.x86_64 5.1.50-1.rhel5 installed

Centos aun sigue trabajando sobre MySQL 5.0.x, muchas funciones que necesitamos de MySQL no las tiene la version 5.0 por ello decidimos irnos por la version que nos proporciona mysql.com.

Bien, vamos a empezar, que version estamos usando de mysqlslap:

mysqlslap Ver 1.0 Distrib 5.1.50, for unknown-linux-gnu (x86_64)

Ahora mysqlslap tiene la opcion de poner trabajar sobre las engines de mysql, he trabajado con otras herramientas para desempeño de mysql y muchas no tiene soporte para otras engines sino solo para myisam.

La engine o motor de MySQL que me interesa es InnoDB por varias funciones que MyISAM no trae , una de ella es "ROLL BACK", la version 5.5 de MySQL ya trae a InnoDB como motor principal asi que tenemos que ir adaptandonos a el cambio.

La bd con la que vamos a trabajar se llama: sbinno y la tabla se llama: sbtest con estos campos:

+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| k | int(10) unsigned | NO | MUL | 0
| c | char(120) | NO
| pad | char(60) | NO
| vchar | varchar(30) | NO | | NULL
+-------+------------------+------+-----+---------+----------------+

Vamos empezando a correr las primeras pruebas, vamos empezando insertando datos a la tabla con mysqlslap:

[root@mysqlmaster ~]# mysqlslap --user=root --password=mipassword --engine=innodb --create-schema="sbinno" --query="INSERT INTO sbtest (k,c,pad,vchar) VALUES (1234567890,'Esta es la informacion que vamos a meter en el campo de nombre c de la tabla sbtest de la base de datos nombre sbinno','Aqui vamos a poner su direccion donde viven calle # colonia','Lugar donde trabajan aqui va')" --number-of-queries=10000

Vamos que estamos haciendo:

--engine=innodb especificamos el motor a usar.
--create-schema="sbinno" la bd que con la que deseamos trabajar.
--query= el comando sql que deseamos ejecutar.
--number-of-queries=10000 cuantes repeticiones deseamos del comando.

1er ejemplo:

mysqlslap --user=root --password=mipassword --engine=innodb --create-schema="sbinno" --query="INSERT INTO sbtest (k,c,pad,vchar) VALUES (1234567890,'bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla','bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla','bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla')" --number-of-queries=1000
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 1.392 seconds
Minimum number of seconds to run all queries: 1.392 seconds
Maximum number of seconds to run all queries: 1.392 seconds
Number of clients running queries: 1
Average number of queries per client: 1000

Ya cada quien decide que datos agregarle.

Podemos ver los resultados el tiempo que le llevo agregar los 1000 registros.


miércoles, 22 de septiembre de 2010

Centos 5.5: Incrementar una particion logica LVM


NOTA: Antes de llevar a cabo este proceso, recordar que si algun servicio depende de este particion debemos apagar esos servicios para que no sea afectados, en mi caso Samba opera en esta particion, tuve que apagar todos los servicios de samba: smb, nmb, windbind.

Otro caso, cuando necesito hacer esto en el servidor de correo, tengo que apagar por ejemplo: postfix, dovecot, y revisar que nadie este dentro del directorio con el comando lsof ejemplo:

lsof | grep /home

sof | grep /home
imap       3794     user1  cwd       DIR      253,2      4096    6488065 /home/user1
imap       3794     user1  mem       REG      253,2    113664   17629545 /home/user1/Maildir/dovecot.index.cache
imap       3794     user1  mem       REG      253,2     23048   17629544 /home/user1/Maildir/dovecot.index.log
imap       3794     user1  mem       REG      253,2      1792    6490085 /home/user1/Maildir/dovecot.index
imap       3794     user1    7u      REG      253,2      1792    6490085 /home/user1/Maildir/dovecot.index
imap       3794     user1    8u      REG      253,2     23048   17629544 /home/user1/Maildir/dovecot.index.log
imap       3794     user1    9u      REG      253,2    113664   17629545 /home/user1/Maildir/dovecot.index.cache
imap       4225     user1  cwd       DIR      253,2      4096    6488065 /home/user1
imap       4225     user1  mem       REG      253,2     39836    6750287 /home/user1/Maildir/.Drafts/dovecot.index.log
imap       4225     user1  mem       REG      253,2       144   17825894 /home/user1/Maildir/.Drafts/dovecot.index
imap       4225     user1    7u      REG      253,2       144   17825894 /home/user1/Maildir/.Drafts/dovecot.index
imap       4225     user1    8u      REG      253,2     39836    6750287 /home/user1/Maildir/.Drafts/dovecot.index.log
imap       4842 user2  cwd       DIR      253,2      4096   14549015 /home/user2
imap       4842 user2  mem       REG      253,2    613376   14549783 /home/user2/Maildir/dovecot.index.cache
imap       4842 user2  mem       REG      253,2     88196   13763032 /home/user2/Maildir/dovecot.index.log
imap       4842 user2  mem       REG      253,2     12736    1900617 /home/user2/Maildir/dovecot.index
imap       4842 user2    7u      REG      253,2     12736    1900617 /home/user2/Maildir/dovecot.index
imap       4842 user2    8u      REG      253,2     88196   13763032 /home/user2/Maildir/dovecot.index.log
imap       4842 user2    9u      REG      253,2    613376   14549783 /home/user2/Maildir/dovecot.index.cache
imap       4849 user2  cwd       DIR      253,2      4096   14549015 /home/user2

Tengo que estar 100% seguro que nadie esta usando el directorio.

Vamos a ver:

1; Si sabemos que tenemos espacio fisico manos a la obra, revisamos cuanto espacio tenemos en nuestro grupo, ya que un Volumen Logico(LogicalVolume) pertenece a uno:

#vgdisplay
 --- Volume group ---
  VG Name               VolGroup00
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  8
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                7
  Open LV               6
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               55.88 GB
  PE Size               32.00 MB
  Total PE              1788
  Alloc PE / Size       1256 / 39.25 GB
  Free  PE / Size       532 / 16.62 GB
  VG UUID               M9IZt3-dsAt-AdZw-yG4n-D46i-s6hM-Nxxdyb

Tenemos : 16GB dispnibles para poder repartir, vamos a agradar nuestro VolumenLogico de nombre: LogVol05 6GB mas.

Este es su espacio antes de llevar a cabo el proceso:

/dev/mapper/VolGroup00-LogVol05 15871      7771      7282  52% /opt

2; Vamos a darle 6GB mas.
lvextend -L+6G /dev/VolGroup00/LogVol05

3; Desmontamos la particion, verificando que nada este abierto en la particion:

umount /opt

4; Verificamos la particion:

e2fsck -f /dev/VolGroup00/LogVol05
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/VolGroup00/LogVol05: 2854/4194304 files (73.2% non-contiguous), 2120610/4194304 blocks

5; Agrandamos la particion:

resize2fs /dev/VolGroup00/LogVol05
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/VolGroup00/LogVol05 to 5767168 (4k) blocks.
The filesystem on /dev/VolGroup00/LogVol05 is now 5767168 blocks long.

6; Montamos la particion y revisamos el nuevo tamaño:

/dev/mapper/VolGroup00-LogVol05 21823      7771     12926  38% /opt

7; Levantar servicios que fueron apagados antes de iniciar este proceso y revisar su operacion, saludos!!!

martes, 21 de septiembre de 2010

Centos 5.x x64 : instalar super-smack 1.3

Ahi va, tenemos que tener:

MySQL-client-community.x86_64 5.1.50-1.rhel5 installed
MySQL-devel-community.x86_64 5.1.50-1.rhel5 installed
MySQL-server-community.x86_64 5.1.50-1.rhel5 installed
MySQL-shared-compat.x86_64 5.1.50-1.rhel5 installed

Y como super-smack no sabe hacerca de /usr/lib64 tenemos que indicarle, para esto ya tenemos el codigo y estamos en la carpeta de super-smack1.3:

./configure --with-mysql --with-mysql-lib=/usr/lib64/

Building with the following options:

MySQL Support..................... yes
PostgreSQL Support................ no
Oracle Support.................... no

If this is not what you intended, please re-run configure.

Thanks for using super-smack!

Esto sale despues de un chorizo mas grande. Tambien debemos tener libtool y sus allegados, texinfo.

Bien una vez ejecutado configure, vamos a ejecutar make, pero debemos hacer lo siguiente para arquitecturas de 64bits, abrir el archivo src/query.cc e irse a la linea aprox. 188 y modificar esa parte del codigo como sigue:

void Query_report::fd_send(int fd)
{
map >::iterator i =
type_reports.begin();
char buf[MAX_REPORT_LEN];
int len = 0, num_recs = 0;
char* p = (char*)buf + 1, *p_end = (char*)buf+sizeof(buf);

while(i != type_reports.end())
{
string s((*i).first);
int str_len = (*i).first.length();
if((long)p + str_len + 3 *sizeof(int) < (long)p_end )
{
*p++ = (char) str_len;
const char* q_type_name = s.c_str();
memcpy(p,q_type_name , str_len);
p += str_len;
memcpy(p, &((*i).second->num_queries), sizeof(int));
p += sizeof(int);
memcpy(p, &((*i).second->max_time), sizeof(int));
p += sizeof(int);
memcpy(p, &((*i).second->min_time), sizeof(int));
p += sizeof(int);
i++;
num_recs++;
}
else
die(0, "report buffer overflow -- too many query types");
}

len = (long)p - (long)buf;

Revisen bien que necesitan modificar.

Ahora si lo instalamos:
[root@mbx-mysqlmaster super-smack-1.3]# make install
Making install in src
make[1]: Entering directory `/usr/app/bench/super-smack-1.3/src'
make[2]: Entering directory `/usr/app/bench/super-smack-1.3/src'
/bin/sh ../mkinstalldirs /usr/local/bin
/usr/bin/install -c super-smack /usr/local/bin/super-smack
/usr/bin/install -c gen-data /usr/local/bin/gen-data
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/usr/app/bench/super-smack-1.3/src'
make[1]: Leaving directory `/usr/app/bench/super-smack-1.3/src'
make[1]: Entering directory `/usr/app/bench/super-smack-1.3'
make[2]: Entering directory `/usr/app/bench/super-smack-1.3'
make[2]: Nothing to be done for `install-exec-am'.
/bin/sh ./mkinstalldirs /usr/share/smacks /var/smack-data
mkdir /usr/share/smacks
mkdir /var/smack-data
cp -rp ./smacks/* /usr/share/smacks
make[2]: Leaving directory `/usr/app/bench/super-smack-1.3'
make[1]: Leaving directory `/usr/app/bench/super-smack-1.3'

Ya solo necesito ver como hacerle para no se vaya a /usr/local/bin. Animo!!!

lunes, 20 de septiembre de 2010

FreeBSD 8: Actualizar reglas de spamassassin via proxy

Como puedo actualizar a spamassassin que esta atras de un web proxy como squid?

Necesitamos dar de alta una variable de sistema, como usamos chs, sa espera que la variable sea dada de alta como si fuera linux, ni modo asi es esto:

http_proxy = http://usuario:password@ip:puerto

Seria dar de alta la variable en .cshrc asi:

http_proxy "http://usuario:password@192.168.1.2:3128"

Listo.

martes, 14 de septiembre de 2010

Centos 5.x: MySQL Tools

Vamos viendo que herramientas podemos usar para saber el desempeño de MySQL, vamos empezando por: msqlreport.

Lo bajamos del site: http://hackmysql.com/mysqlreport

Descomprimimos y empezamos a trabajar sobre el:

#./mysqlreport
./mysqlreport
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at (eval 7) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, Sponge.
at ./mysqlreport line 249

Bien, vamos a ver necesitamos instalar los siguientes paquetes antes de continuar:

yum install perl-DBD-mysql

Ahora ejecutamos ahora si el programa con los parametros del servidor:

./mysqlreport --user username --password mipassword

Use of uninitialized value in multiplication (*) at ./mysqlreport line 829.
Use of uninitialized value in formline at ./mysqlreport line 1227.
MySQL 5.1.50-community- uptime 0 6:19:10 Tue Sep 14 23:30:32 2010

__ Key _________________________________________________________________
Buffer used 28.00k of 384.00M %Used: 0.01
Current 71.85M %Usage: 18.71
Write hit 35.75%
Read hit 94.88%

__ Questions ___________________________________________________________
Total 3.05k 0.1/s
Com_ 1.64k 0.1/s %Total: 53.82
QC Hits 630 0.0/s 20.66
DMS 458 0.0/s 15.02
COM_QUIT 327 0.0/s 10.72
-Unknown 7 0.0/s 0.23
Slow 10 s 1 0.0/s 0.03 %DMS: 0.22 Log: OFF
DMS 458 0.0/s 15.02
SELECT 395 0.0/s 12.96 86.24
INSERT 33 0.0/s 1.08 7.21
DELETE 27 0.0/s 0.89 5.90
UPDATE 2 0.0/s 0.07 0.44
REPLACE 1 0.0/s 0.03 0.22
Com_ 1.64k 0.1/s 53.82
set_option 611 0.0/s 20.04
show_tables 232 0.0/s 7.61
change_db 192 0.0/s 6.30

Scan 719 0.0/s %SELECT: 182.03
Range 0 0/s 0.00
Full join 0 0/s 0.00
Range check 0 0/s 0.00
Full rng join 0 0/s 0.00
Sort scan 18 0.0/s
Sort range 0 0/s
Sort mrg pass 0 0/s

__ Query Cache _________________________________________________________
Memory usage 165.27k of 32.00M %Used: 0.50
Block Fragmnt 1.70%
Hits 630 0.0/s
Inserts 197 0.0/s
Insrt:Prune 197:1 0.0/s
Hit:Insert 3.20:1

__ Table Locks _________________________________________________________
Waited 0 0/s %Total: 0.00
Immediate 536 0.0/s

__ Tables ______________________________________________________________
Open 35 of 512 %Cache: 6.84
Opened 51 0.0/s

__ Connections _________________________________________________________
Max used 4 of 151 %Max: 2.65
Total 329 0.0/s

__ Created Temp ________________________________________________________
Disk table 143 0.0/s
Table 687 0.0/s Size: 16.0M
File 5 0.0/s

__ Threads _____________________________________________________________
Running 1 of 1
Cached 3 of 8 %Hit: 98.78
Created 4 0.0/s
Slow 0 0/s

__ Aborted _____________________________________________________________
Clients 0 0/s
Connects 10 0.0/s

__ Bytes _______________________________________________________________
Sent 1.80M 79.3/s
Received 245.42k 10.8/s

__ InnoDB Buffer Pool __________________________________________________
Usage 304.00k of 8.00M %Used: 3.71
Read hit 84.42%
Pages
Free 493 %Total: 96.29
Data 19 3.71 %Drty: 0.00
Misc 0 0.00
Latched 0.00
Reads 77 0.0/s
From file 12 0.0/s 15.58
Ahead Rnd 1 0.0/s
Ahead Sql 0 0/s
Writes 0 0/s
Flushes 0 0/s
Wait Free 0 0/s

__ InnoDB Lock _________________________________________________________
Waits 0 0/s
Current 0
Time acquiring
Total 0 ms
Average 0 ms
Max 0 ms

__ InnoDB Data, Pages, Rows ____________________________________________
Data
Reads 25 0.0/s
Writes 3 0.0/s
fsync 3 0.0/s
Pending
Reads 0
Writes 0
fsync 0

Pages
Created 0 0/s
Read 19 0.0/s
Written 0 0/s

Rows
Deleted 0 0/s
Inserted 0 0/s
Read 0 0/s
Updated 0 0/s

Le toca el turno a mysqltuner, lo bajamos de:

http://blog.mysqltuner.com/

Lo ponemos en modo script:

chmod +x mysqltuner.pl

./mysqltuner.pl

>> MySQLTuner 1.0.1 - Major Hayden
>> Bug reports, feature requests, and downloads at http://mysqltuner.com/
>> Run with '--help' for additional options and output filtering
Please enter your MySQL administrative login: root
Please enter your MySQL administrative password:

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.1.50-community-log
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 924B (Tables: 9)
[!!] InnoDB is enabled but isn't being used
[OK] Total fragmented tables: 0

-------- Performance Metrics -------------------------------------------------
[--] Up for: 15m 18s (28 q [0.031 qps], 15 conn, TX: 26K, RX: 1K)
[--] Reads / Writes: 100% / 0%
[--] Total buffers: 1.4G global + 12.4M per thread (151 max threads)
[!!] Maximum possible memory usage: 3.3G (167% of installed RAM)
[!!] Slow queries: 10% (3/28)
[OK] Highest usage of available connections: 0% (1/151)
[OK] Key buffer size / total MyISAM indexes: 384.0M/120.0K
[!!] Query cache efficiency: 0.0% (0 cached / 14 selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 1 sorts)
[OK] Temporary tables created on disk: 0% (0 on disk / 8 total)
[OK] Thread cache hit rate: 93% (1 created / 15 connections)
[OK] Table cache hit rate: 82% (32 open / 39 opened)
[OK] Open file limit used: 5% (68/1K)
[OK] Table locks acquired immediately: 100% (18 immediate / 18 locks)
[!!] Connections aborted: 13%

-------- Recommendations -----------------------------------------------------
General recommendations:
Add skip-innodb to MySQL configuration to disable InnoDB
MySQL started within last 24 hours - recommendations may be inaccurate
Reduce your overall MySQL memory footprint for system stability
Your applications are not closing MySQL connections properly
Variables to adjust:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
query_cache_limit (> 1M, or use smaller result sets)

Ahora le toca a innotop este lo bajamos de:

http://code.google.com/p/innotop/downloads/list

Descomprimimos y vemos que necesitamos:

perl Makefile.PL
Checking if your kit is complete...
Looks good
Warning: prerequisite Term::ReadKey 2.1 not found.
Writing Makefile for innotop

Necesitamos instalar:

yum install perl-TermReadKey

Ahora si lo instalamos:

make install
cp innotop blib/script/innotop
/usr/bin/perl "-MExtUtils::MY" -e "MY->fixin(shift)" blib/script/innotop
Manifying blib/man1/innotop.1
Installing /usr/share/man/man1/innotop.1
Installing /usr/bin/innotop
Writing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/innotop/.packlist
Appending installation info to /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/perllocal.pod

Probando:

innotop --u root --password mi-password

When Load QPS Slow QCacheHit KCacheHit BpsIn BpsOut
Total 0.00 0.12 0 42.86% 100.00% 5.27 82.19

Cmd ID State User Host DB Time Query
Daemon 1 Waiting on empty q event_sc localhost 14:31

Listo.

Ahora le toca el turno a mysqlsla, este lo bajamos de:

http://hackmysql.com/mysqlsla

Lo mismo, descomprimimos y a instalar, leer el INSTALL ee.

perl Makefile.PL
Checking if your kit is complete...
Looks good

make
cp lib/mysqlsla.pm blib/lib/mysqlsla.pm
cp bin/mysqlsla blib/script/mysqlsla
/usr/bin/perl "-MExtUtils::MY" -e "MY->fixin(shift)" blib/script/mysqlsla
Manifying blib/man3/mysqlsla.3pm

make install
Installing /usr/lib/perl5/site_perl/5.8.8/mysqlsla.pm
Installing /usr/share/man/man3/mysqlsla.3pm
Installing /usr/bin/mysqlsla
Writing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/mysqlsla/.packlist
Appending installation info to /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/perllocal.pod

Probamos:

mysqlsla --log-type slow
Report for slow logs:
0 queries total, 0 unique
Sorted by 't_sum'
Grand Totals: Time 0 s, Lock 0 s, Rows sent 0, Rows Examined 0

Aun no tenemos nada listo, pero ahi esta corriendo.

Otro mas mytop y mtop.

super-smack.

Debemos copear el archivo /usr/share/smack/select-key.smack ahi mismo con el nombre select-key-mysql.smack.

Editarlo a nuestros parametros.

Y por ejemplo ejecutarlo asi:

super-smack -d mysql select-key-mysql.smack 10 1000

Query Barrel Report for client smacker1
connect: max=203ms min=0ms avg= 43ms from 10 clients
Query_type num_queries max_time min_time q_per_s
select_index 20000 0 0 38950.44

Aqui genera una tabla myisam.

Le toca el turno a sysbench, Centos 5.5 tiene la 0.4.10, del sitio podemos descargar la 0.4.12, es lo que vamos hacer e instalar.

Leyendo el INSTALL del src dice que debemos hacer esto:

1; Desempaquetar el archivo .tar.gz.
2; Entrar a el directorio creado.
3; Ejecutar:
./configure
4; Ejecutar
make ---->Pero antes de instalar libtool,autocof,gcc,gcc-c++ con yum.
5; make install

Listo ya tenemos a sysbench operable.

Vamos a generar una tabla de nombre sbtest como dice el manual con




lunes, 13 de septiembre de 2010

FreeBSD 8.x: Modulo coretemp

Tengo problemas con un servidor supermicro 1U que tiene un Xeon dual core CPU: Intel(R) Xeon(R) CPU E3110 @ 3.00GHz (2999.68-MHz K8-class CPU).

Este servidor tiene la funcion de spam filter. Sus uptimes no han sido revasados:

bsdsar
Time % User % Sys % Nice % Intrpt % Idle
00:00 0 0 0 0 100
01:00 0 0 0 0 100
02:00 0 0 0 0 100
03:00 0 0 0 0 100
04:00 0 0 0 0 100
05:00 0 0 0 0 100
06:00 0 1 0 0 99
07:00 0 0 0 0 100
08:00 0 0 0 0 100
08:45 0 0 0 0 100
08:50 0 0 0 0 100
08:55 0 0 0 0 100
09:00 0 0 0 0 100
09:45 0 0 0 0 100
09:50 0 0 0 0 100
09:55 0 0 0 0 100
10:00 0 0 0 0 100
10:45 0 0 0 0 100
10:50 0 0 0 0 100
10:55 0 0 0 0 100
11:00 0 0 0 0 100
11:45 0 0 0 0 100
11:50 0 0 0 0 100
11:55 0 0 0 0 100
12:00 0 0 0 0 100
12:45 0 0 0 0 100
12:50 0 0 0 0 100
12:55 0 0 0 0 100
13:00 0 0 0 0 99
13:45 3 4 0 0 94
13:50 3 3 0 0 94
13:55 2 4 0 0 94
14:00 3 3 0 0 94

Por alguna razon turbia se me congela cada 2 o 3 semanas, no es nuevo pero quiero pensar que algo hace que se caliente y le pase esto, la desventaja es que no lo tengo en mi oficina, sino en las oficinas centrales que solo visito 1 vez a la semana.

Solo una vez me toco estar presente cuando se congelo, cuando entre a el cuarto de servidores los abanicos estaban trabajando al maximo parecia que iba a despejar, el teclado no respondia, asi que no tuve otra manera mas sana de resetearlo que de botonazo, lo que nunca se debe hacer.

Bien en cuanto lo hice, los abanicos empezaron a trabajar de manera normal, se reinicio el servidor y el raid-1 no sufrio dano alguno.

Los servidores cada vez son mas inteligentes y tienen mas electronica integrada, ellos mismos balancean la velocidad de los abanicos de acuerdo a la temperatura del nucleo, la gran desventaja que siempre hacen las aplicaciones encargadas o para windows o para linux redhat.

Los otros como el caso de FreeBSD no tiene esas comodidades, por ello los programadores tienen que hacer utilerias que hagan estas tareas.

Para esto alguien en el foro de freebsd comento del modulo coretemp:

man coretemp
CORETEMP(4) FreeBSD Kernel Interfaces Manual CORETEMP(4)

NAME
coretemp -- device driver for Intel Core on-die digital thermal sensor

SYNOPSIS
To compile this driver into the kernel, place the following line in your
kernel configuration file:

device coretemp

Alternatively, to load the driver as a module at boot time, place the
following line in loader.conf(5):

coretemp_load="YES"

DESCRIPTION
The coretemp driver provides support for the on-die digital thermal sen-
sor present in Intel Core and newer CPUs.

The coretemp driver reports each core's temperature through a sysctl node
in the corresponding CPU device's sysctl tree, named
dev.cpu.%d.temperature.

SEE ALSO
sysctl(8)

HISTORY
The coretemp driver first appeared in FreeBSD 7.0.

AUTHORS
The coretemp driver was written by Rui Paulo as part
of a Google Summer of Code project. This manual page was written by
Dag-Erling Smorgrav .

FreeBSD 8.0 August 23, 2007 FreeBSD 8.0

Preguntando me comentaron que aplica a los chips nuevos, en mi caso parece que Xeon es parte de ellos, aqui un ejemplo de mi salida:

sysctl -a | grep temperature
dev.cpu.0.temperature: 41.0C
dev.cpu.1.temperature: 40.0C

Ahora necesito un script que me mande cada 5 minutos un correo con la temperatura actual, asi podre saber si en realidad la temperatura del cpu este llegando a un nivel que provoca esto, tengo que dar con el problema, este es el script con cron:

#crontab -e
*/5 * * * * /sbin/sysctl -a | grep temperature | mail -s "Temperatura Actual" root

Esto es lo que me llega:

Subject: Temperatura Actual

dev.cpu.0.temperature: 41.0C
dev.cpu.1.temperature: 40.0C

No soy un experto en scripts, pero ya vere como hacerle para que cuando llegue a cierta temperatura me mande un aviso de "Peligro" y prevenir que se congele el equipo.

Para activar este modulo tenemos 2 opciones o lo incluimos en el kernel o lo cargamos como modulo, yo prefiero lo 1ro.

device coretemp

Hacen todos los pasos para compilar el kernel, instalarlo y arrancarlo.

O si prefieren lo segundo, abren el /boot/loader.conf y agregan esta linea:

coretemp_load="YES"

Esto es para que cada que reinicien se cargue el modulo, si lo quieren cargar en tiempo real ya saben besederos:

kldload coretemp

Listo.

Si existen mas maneras de llevar a cabo esto me avisan!!!

lunes, 6 de septiembre de 2010

FreeBSD 7/8: apache cgi-bin test

Necesitamos correr unos cgi-bin para apcupsd en FreeBSD, segun husmeando el directorio de apache tenemos esto:

/usr/local/www/apache22/cgi-bin

Ahi aparecen 2 archivos de prueba:
  • printenv
  • test-cgi
Ahora si nos vamos aun navegador a ejecutarlos nos dice que:

****************************************************************

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

****************************************************************

Bien vamos viendo que dicen los logs de apache:

[Mon Sep 06 11:58:59 2010] [error] [client 192.168.90.31] (13)Permission denied: exec of '/usr/local/www/apache22/cgi-bin/printenv' failed
[Mon Sep 06 11:58:59 2010] [error] [client 192.168.90.31] Premature end of script headers: printenv

mmmm permiso denegado, ahora los archivos cgi-bin son alfinal de cuentas scripts hechos por lo comun en perl.

Vamos dondo los permisos de ejecucion como cualquier script perl, bash, sh, etc.

chmod +x test-cgi

Probamos:

CGI/1.0 test script report:

argc is 0. argv is .

SERVER_SOFTWARE = Apache/2.2.16 (FreeBSD) mod_ssl/2.2.16 OpenSSL/0.9.8e DAV/2 PHP/5.3.3 with Suhosin-Patch
SERVER_NAME = 192.168.90.3
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.1
SERVER_PORT = 80
REQUEST_METHOD = GET
HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
PATH_INFO =
PATH_TRANSLATED =
SCRIPT_NAME = /cgi-bin/test-cgi
QUERY_STRING =
REMOTE_HOST =
REMOTE_ADDR = 192.168.90.31
REMOTE_USER =
AUTH_TYPE =
CONTENT_TYPE =
CONTENT_LENGTH =

Listo, ya se que puedo crear mis scripts y subirlos a mi servidor, saludos!!!