Реклама на сайте Advertise with us

Нужно переписать скрипт с PHP на С

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Мотиватор :)

С нами с 06.05.09
Сообщения: 3028
Рейтинг: 607

Ссылка на сообщениеДобавлено: 08/08/10 в 23:53       Ответить с цитатойцитата 

В общем есть у нас софт, который использует мультитредовость. Как известно, PHP её не поддерживает, поэтому вызывается куча instances (не знаю как это перевести на русский, но вы знаете, о чём идёт речь) этого скрипта по крону:

/usr/bin/php path-to/php-thread-script.php thread-num

Скрипт берёт из mySQL базы записи по определенному условию (они содержат адрес получателя, тему письма, текст письма) и отправляет их через SMTP сервер (который работает на том же физическом сервере). Сам скрипт простой, по сути он занимается только отправкой сообщений, которые были адресованы именно этому скрипту (соответствующие поля в базе данных).

В общем, проблема в том, что у сервера очень быстро заканчивается физическая память (сейчас запускаются 60 таких instances, но нам нужно около 200) и сервак в прямом смысле умирает (перестает отвечать на запросы на длительное время, в то время, когда отвечает, команда top показывает загрузку от 20 до 40).

Необходимо заоптимизировать этот процесс по максимуму, в идеале переписать мультитредовый скрипт на C с использованием как можно меньшего количества библиотек.

Стоимость работы и сроки кидайте в личку. Работа срочная.

Just a signature.

-2
 



С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096

Ссылка на сообщениеДобавлено: 09/08/10 в 04:37       Ответить с цитатойцитата 

немного оффтоп, но все же. скорее всего, такая нагрузка на сервак вызвана не самим php как таковым, а мускулем. си тут особо не поможет. решается просто - перед началом самого процесса работы разом делается нужная выборка из базы, и кладется в удобном виде в файл. во время работы промежуточные результаты кладутся также в файл, если конечно они нужны. единственное, нужно грамотно синхронизацию потоков сделать. после окончания работы файлы считываются и результат импортируется назад в базу.

а чтобы не плодить кучу процессов php, я например рабочую часть скрипта переписал на питоне. там с многопоточностью дела получше, да и субъективно пошустрее стало.

0
 

php

С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410


Передовик Master-X (16.01.2010)
Ссылка на сообщениеДобавлено: 09/08/10 в 07:50       Ответить с цитатойцитата 

webboxxx: +1
можно и перл заюзать, он тоже неплохо подходит для таких целей.

IPhosters.com - любые решения для Вас (виртуалы от $4.99, vps от $11.99, дедики от $95)

0
 



С нами с 11.01.07
Сообщения: 3601
Рейтинг: 2682


Передовик Master-X (16.01.2013) Передовик Master-X (01.02.2013) Передовик Master-X (16.02.2014)
Ссылка на сообщениеДобавлено: 09/08/10 в 16:17       Ответить с цитатойцитата 

webboxxx: +1

к тому же я уверен что если дело именно в памяти то однозначно дешевле купить еще памяти на сервак, чем переписывать на сях.

FREE NETWORK ! @ SmartCJ - самый умный trade script
Public BL hosted by Hostiserver.com

0
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 09/08/10 в 16:37       Ответить с цитатойцитата 

править сишный проект имхо потом будет сложнее... если есть недорогая возможность прооптимизировать пхп-шный скрипт - имхо лучше сделать это. серв не должен укладыватся от 60 потоков для указанной задачи.. тмеболее как написали выше скорее проблема в " берёт из mySQL базы записи по определенному условию", т.е. тормоз дает не оптимизированная работа с базой а не пхп.

0
 

php

С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410


Передовик Master-X (16.01.2010)
Ссылка на сообщениеДобавлено: 09/08/10 в 16:49       Ответить с цитатойцитата 

Heavy: php работает очень плохо с потоками и 60 это для него реально может быть проблематичным.

IPhosters.com - любые решения для Вас (виртуалы от $4.99, vps от $11.99, дедики от $95)

0
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 09/08/10 в 17:47       Ответить с цитатойцитата 

хз. задача-то не сложная у ТС... могу только сказать, что чуть выше среднего сервачок держит более 400 instances "мультифида" одновременно в секунду, каждая из которых делает минимум 15-17 обращений в немелкую базу, детальный геоип, и 3-5 запросов курлом.
да и как бы сиджи выживали, если на 60 процессах они были бы уже дохлые.

Цитата:
для него реально может быть проблематичным

имхо, ключевое слово "может быть", в любом языке|коде если подходить со стороны - "будет тормозить - поставим серв мощнее", оно так и будет. другое дело, что на пыхе в потолок упереться гораздо проще.

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 09/08/10 в 21:58       Ответить с цитатойцитата 

Все уже написали

http://search.cpan.org/~ultradm/POE-Component-Client-SMTP-0.22/lib/…nt/SMTP.pm

Задача, как говорил Холмс, "на одну трубку". Даже местные "работающие за орешки" должны бы справиться без проблем.

0
 



С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506

Ссылка на сообщениеДобавлено: 10/08/10 в 00:29       Ответить с цитатойцитата 

+1 либо mysql либо smtp тормоз тут.

0
 



С нами с 20.07.10
Сообщения: 1414
Рейтинг: 56

Ссылка на сообщениеДобавлено: 10/08/10 в 02:32       Ответить с цитатойцитата 

Перепишу )
617965951

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 10/08/10 в 10:34       Ответить с цитатойцитата 

grozny писал:
+1 либо mysql либо smtp тормоз тут.


Цитата:
В общем, проблема в том, что у сервера очень быстро заканчивается физическая память


Да, mysql всю ее съедает как-то, конечно icon_rolleyes.gif
Проблема банальная - в синхронности вызова mail(), который сидит и ждет отправки и плодит процессы. Решение - столь же банально, в асинхронном вызове, том же POE, который просто регистрирует вызов в кернеле и возвращает управление, никакой многопоточности-многопроцессности не нужно, скрипт в один поток все достанет из базы и пулеметом все отправит со скоростью SELECT, пишется за 20 минут на коленке.

Объяснять, что база данных, нормально сделанная, с индексами и запросами, над которыми хотя бы чуть подумали, а не как тут пишут многие, вообще-то на порядки быстрее текстовых файлов - для того их и придумали, что в текстовых файлах искать информацию есть очень ресурсоемкий процесс - я уж не буду, это запредельно.

Последний раз редактировалось: Dr.Syshalt (10/08/10 в 10:53), всего редактировалось 1 раз

0
 



С нами с 31.05.10
Сообщения: 1991
Рейтинг: 487

Ссылка на сообщениеДобавлено: 10/08/10 в 10:49       Ответить с цитатойцитата 

блин, тс просил чтобы ему скрипт починили а тут собралась куча

потеоретизировать насчет того, что у него могло случиться. icon_smile.gif
"Это же форум ботаников?" (C) кто-то

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 10/08/10 в 10:54       Ответить с цитатойцитата 

LeadFarmer: А ты типа самый практик по вставлению картинок "я и мои друзья" в форумы?

0
 



С нами с 20.07.10
Сообщения: 1414
Рейтинг: 56

Ссылка на сообщениеДобавлено: 10/08/10 в 14:57       Ответить с цитатойцитата 

скрипт то переписали?

0
 



С нами с 31.05.10
Сообщения: 1991
Рейтинг: 487

Ссылка на сообщениеДобавлено: 10/08/10 в 15:19       Ответить с цитатойцитата 

Dr.Syshalt писал:
LeadFarmer: А ты типа самый практик по вставлению картинок "я и мои друзья" в форумы?

ну раз я тоже отписался в этой ветке то видимо да icon_smile.gif

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор сайта

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »