Ноя 01

Оказывается, в shell есть команда для построения графика изменения la с течением времени – tload
Результат –
А я всё по старинке пользовался top-ом).
http://linux.about.com/library/cmd/blcmdl1_tload.htm

Теги:
Окт 18

Работал раньше сайт с memcache.
Решили перейти на memcached.
И повалились ошибки SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY, причём сначала одна CLIENT ERROR, а уже потом куча SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY.
Гугление ничего не дало, а проблема оказалась в следующем: первая ошибка возникала из-за некорректного ключа (пробел в названии ключа), после чего сервер расстраивался, и больше ничего делать не давал.
Ключ был следующий: info__rating DESC__1, генерился автоматически и никаких проблем при использовании его в memcache не вызывал. Понятное дело, что ключ плохой, но это не мешало другому расширению успешно работать.
А решение применили банальное: $Key = str_replace( ‘ ‘, ‘_’, $Key );, теперь вроде работает).
Окончательно все проблемы решила опция

$this->setOption( Memcached::OPT_BINARY_PROTOCOL,   true );

После этого лог ошибок стал пустым.
Коллега, который этим вопросом плотно занимается, считает, что это оттого, что по умолчанию протокол используется plain text (а именно, ascii), и UTF-символы интерпретируются неправильно (у нас ферма из нескольких машин, и на каждой окружение несколько отличается, к сожалению). И как только включили бинарный протокол, разногласия исчезли.

	function __construct()
	{
		parent::__construct();

		$this->setOption( Memcached::OPT_BINARY_PROTOCOL, true );
		$this->setOption( Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT );
		$this->setOption( Memcached::OPT_HASH, Memcached::HASH_CRC );
		$this->setOption( Memcached::OPT_SERVER_FAILURE_LIMIT, 3 );
		$this->setOption( Memcached::OPT_NO_BLOCK, true );									// асинхронный ввод-вывод
		$this->setOption( Memcached::OPT_TCP_NODELAY, true );									// при работе с сокетами надо потестить - может ускорить работу

		$this->connection = $this->addServers( array(	array( <хост>, <порт> ) ) );
		...
	}

При использовании ключа:

	...
	$key = str_replace( array( ' ', ',', ':' ), '_', $key );

	if ( strlen($key) > 220 ) {
		$key = md5( $key );
	}
	...
Теги:
Сен 23
	$limit = 512;
	$thresholdDelta = 10;
	ini_set('memory_limit', $limit . 'm');
	...
	$memoryThresholdReached = false;
	$memoryThreshold = ( $limit - $thresholdDelta ) * 1024 * 1024;
	...
	while ( $user = $db->plain_fetch( $result ) )
	{
		...
	// тут работа с данными
		...
	// проверка на превышение опасного порога использования памяти
		if ( ! $memoryThresholdReached && memory_get_usage( true ) > $memoryThreshold )
		{
			$memoryThresholdReached = true;
			try {
				throw new SystemException( 'Превышен порог использования памяти...' );
			}
			catch ( Exception $e ) {}
		}
	}

Более серьёзные способы – просмотр стека (strace -f -p $pid) и дебаг php C-шным дебаггером DBG.

Теги:
Июл 14

Сбойнул один старый скрипт и написал он много маленьких (2-3 кб) файлов в одну директорию.

Посмотрел я, сколько файлов оказалось, командой для подсчёта количества файлов в директории

ls -1 | wc -l

Оказалось файлов таких за миллион.

На эти файлы смотрел скрипт демонский, который по ним рассылал почты много.

Решил я эти файлы из директории той убрать (чтоб пользователей не расстраивать, а данные сохранить)

ls *.eml -1 | xargs -I {} mv {} ./fuckup/{}

но не разрешил мне линукс сделать этого (bash: /bin\/ls: Argument list too long).

Пришлось сделать так:

ls -1 | xargs -I {} mv {} ./fuckup/{}
Теги:
Июн 15

Понадобилось восстановить бэкап mysql размером примерно в гигабайт.
Всякие phpMyAdmin даже сжатый файл кушать отакзываются – ограничение по размеру, а доступа к настройкам нет.
Нашёл хороший способ – в командной строке

mysql

mysql>use database <>;
mysql>source path/to/backup_file.sql;

Очень быстро и хорошо)

http://forums.mysql.com/read.php?104,145923,148081#msg-148081

Теги:
Янв 30

Вывод всех портов и программ, которые их слушают:

netstat -anp | grep "LISTEN "
Теги:
Дек 19

Запустить новый проект
Перед запуском надо записать изменения в базу данных:

python manage.py syncdb

Также можно проверить на ошибки:

python manage.py validate

Запустить проект:

python manage.py runserver

Кстати, тут много про запуск Django в продакшн-окружении.

Теги:
Ноя 27

Проверяем, есть ли SSH

$ ssh -v

Генерируем ключик

$ ssh-keygen

Для пользователей Ubuntu для доступности ключа

chmod 644 ~/.ssh/id_rsa.pub
ssh-agent bash
ssh-add

Всё)
Ссылка на оригинал

Теги:
Ноя 18

Всё просто – нужно его сгенерировать и дописать конфиг – подробнее:
http://wiki.enchtex.info/howto/nginx_ssl

Для использования в связке с php-fpm нужно указать:

fastcgi_param  HTTPS on;
Теги:
Окт 06

Командой sudo fdisk -l узнаём названия разделов, к примеру

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1        8924    71681998+   7  HPFS/NTFS
/dev/sda2            8925       19215    82655250    5  Расширенный
Раздел 2 не заканчивается на границе цилиндра.
/dev/sda4           19215       19458     1952768   83  Linux
/dev/sda5            8925       15452    52436128+   7  HPFS/NTFS
/dev/sda6           18607       19215     4882432   83  Linux
/dev/sda7           17512       17877     2929664   82  Linux своп / Solaris
/dev/sda8           17878       18073     1574336+  83  Linux
/dev/sda9           18074       18606     4281291   83  Linux
/dev/sda10          16194       17511    10585088   83  Linux

Находим свой любимый NTFS-раздел.
Далее правим файл /etc/fstab – добавляем строку (для раздела /dev/sda5)

/dev/sda5	/media/d	ntfs-3g	defaults 	0	 0

Не забыть в конце файла пустую строку.
После чего перезагружаемся – всё лежит там, где бы мы хотели.
Подмонтировать сразу можно командой sudo mount -a.

Теги:
preload preload preload