Russian Apache Switch to English
Switch to Russian koi8-r
windows=1251
cp-866
iso8859-5
Russian Apache Как это работает Рекоммендации Где взять Как установить Как настроить Статус и поддержка
Краткий обзор FAQ Список рассылки Благодарности Поиск по серверу Powered by Russian Apache
Russian Apache mailing list archive (apache-rus@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[apache-rus] RE: [apache-rus] баг ???



		Господа Cygwin'щики
Предупреждаю, в Apache для Cygwin есть один глюк: он странно "отстреливает" ненужных детей. Ниже привожу фрагмент письма, отправленного Тутубалину полторы недели назад. 

					С уважением
					Дмитрий Пашко
 

---------------------------------------
Про Apache под Cygwin'ом.

Леша, я тут взгромоздил себе RusApache под Cygwin'ом. При установке
я обнаружил пару неприятностей, о которых спешу тебе сообщить.

1. В последней сборке, которая PL30.5 ты потерял каталог src/os/cygwin/
   без которого, сам понимаешь, ничего Cygwin'ом собрать не удастся. 
   В связи с этим тонкий намек: восстановил бы ты историческую справедливость
   и добавил оный каталог в свою сборку.

2. Оказалось, что на httpd.apache.org лежит два разных дистрибутива: один
   официальный (собственно то, что лежит в downloads), другой... работает. 
   Проблема в следующем: Apache под Cygwin, в отличие от версии под Win32,
   работает на fork'ах, т.е. как в настоящем Unix'е. Только, в отличие от
   настоящего Unix'а, под Cygwin'ом как-то странно отрабатывается сигнал
   SIGUSR1. А этот сигнал, в частности, используется Apache'ем для завершения 
   ненужных процессов, находящихся в idle-состоянии. Результат потрясающий:
   приходях добрые пользователи и нагружают сервер. На это Apache начинает 
   плодить новые процессы, дабы обслужить страждущих. Но после того, как 
   пользователи уходят, Apache-родитель начинает "отстреливать" лишние
   процессы в idle, а они, гады, вместо того, чтобы тихо умереть,
   зацикливаются и "cъедают" процессор. Не смертельно в общем-то,
   но как-то уж очень неаккуратно.
       Попытки разобраться с этим привели меня на страницу, на которой
   лежал бинарный дистрибутив Apache 1.3.20 под Cygwin:
	  http://httpd.apache.org/dist/httpd/binaries/cygwin/
   Эксперименты с этим дистрибутивом показали, что бага, которую я описал
   выше, в ЭТОМ дистрибутиве отсутствует. Сравнение показало, что исходники
   отличаются несколькими строками в конфигурации и той самой обработкой 
   idle-процессов. В общем, после перенесения всех изменений в PL30.5 все
   заработало как часы.
       Список изменений я выделил отдельный патч (см. ниже), который
   рекомендую всем пользователям связки Cygwin + Apache.

Алексей, у меня к тебе просьба: восстанови при случае потерянный каталог и 
выложи на сервере этот patch. Думаю он будет полезен не только мне.

                                  Дмитрий Пашко
                                  mailto:d_pashko@xxxxxxxxx

P.S. Еще бы какой-нибудь человек с приличным английским намекнул бы на
www.apache.org, что полезно переносить их же собственные правки в официальный 
релиз...

-------------------------------------------

diff -aur ./src/Configure ../apache_1.3.20.bin/src/Configure
--- ./src/Configure	Thu May 10 18:04:16 2001
+++ ../apache_1.3.20.bin/src/Configure	Tue Jun 12 02:24:36 2001
@@ -840,7 +840,8 @@
 	OSDIR="os/cygwin"
 	CFLAGS="$CFLAGS -DCYGWIN"
 	DEF_WANTHSREGEX=yes
-	LIBS="$LIBS -lcrypt"
+	DBM_LIB="-lgdbm"
+	LIBS="$LIBS -lcrypt $DBM_LIB"
 	;;
     *) # default: Catch systems we don't know about
 	OS='Unknown and unsupported OS'
diff -aur ./src/helpers/binbuild.sh ../apache_1.3.20.bin/src/helpers/binbuild.sh
--- ./src/helpers/binbuild.sh	Mon Oct 23 19:48:00 2000
+++ ../apache_1.3.20.bin/src/helpers/binbuild.sh	Tue Jun 12 02:33:08 2001
@@ -9,6 +9,8 @@
 OS=`src/helpers/GuessOS`
 case "x$OS" in
   x*390*) CONFIGPARAM="--with-layout=BinaryDistribution --enable-module=most";;
+  *cygwin*) CONFIGPARAM="--with-layout=BinaryDistribution --enable-module=most \
+                         --enable-rule=SHARED_CORE --enable-module=so --libexecdir=bin";;
       *) CONFIGPARAM="--with-layout=BinaryDistribution --enable-module=most --enable-shared=max";;
 esac
 APDIR=`pwd`
diff -aur ./src/helpers/install.sh ../apache_1.3.20.bin/src/helpers/install.sh
--- ./src/helpers/install.sh	Fri Dec 10 14:03:20 1999
+++ ../apache_1.3.20.bin/src/helpers/install.sh	Tue Jun 12 02:24:36 2001
@@ -87,7 +87,11 @@
     dst="$dst/`basename $src`"
 fi
 
-#  Add a possible extension (such as ".exe") to src and dst
+#  Check if we need to add an executable extension (such as ".exe") 
+#  on specific OS to src and dst
+if [ -f "$src.exe" ]; then
+  ext=".exe"
+fi
 src="$src$ext"
 dst="$dst$ext"
 
diff -aur ./src/include/ap_config.h ../apache_1.3.20.bin/src/include/ap_config.h
--- ./src/include/ap_config.h	Fri Apr  6 07:13:11 2001
+++ ../apache_1.3.20.bin/src/include/ap_config.h	Tue Jun 12 02:24:36 2001
@@ -955,6 +955,12 @@
 #define JMP_BUF jmp_buf
 #define NO_KILLPG
 #define USE_LONGJMP
+#define GDBM_STATIC
+#define HAVE_MMAP 1
+#define USE_MMAP_SCOREBOARD
+#define USE_MMAP_FILES
+#define HAVE_SYSLOG 1
+
 
 #else
 /* Unknown system - Edit these to match */
diff -aur ./src/main/http_main.c ../apache_1.3.20.bin/src/main/http_main.c
--- ./src/main/http_main.c	Thu Apr 12 21:49:26 2001
+++ ../apache_1.3.20.bin/src/main/http_main.c	Tue Jun 12 02:24:36 2001
@@ -4412,6 +4412,20 @@
 #endif
 static int hold_off_on_exponential_spawning;
 
+/*
+ * Define the signal that is used to kill off children if idle_count
+ * is greater then ap_daemons_max_free. Usually we will use SIGUSR1
+ * to gracefully shutdown, but unfortunatly some OS will need other 
+ * signals to ensure that the child process is terminated and the 
+ * scoreboard pool is not growing to infinity. This effect has been
+ * seen at least on Cygwin 1.x. -- Stipe Tolj <tolj@xxxxxxxxxxxxxxxx>
+ */
+#if defined(CYGWIN)
+#define SIG_IDLE_KILL SIGKILL
+#else
+#define SIG_IDLE_KILL SIGUSR1
+#endif
+
 static void perform_idle_server_maintenance(void)
 {
     int i;
@@ -4491,9 +4505,10 @@
     if (idle_count > ap_daemons_max_free) {
 	/* kill off one child... we use SIGUSR1 because that'll cause it to
 	 * shut down gracefully, in case it happened to pick up a request
-	 * while we were counting
+	 * while we were counting. Use the define SIG_IDLE_KILL to reflect
+	 * which signal should be used on the specific OS.
 	 */
-	kill(ap_scoreboard_image->parent[to_kill].pid, SIGUSR1);
+	kill(ap_scoreboard_image->parent[to_kill].pid, SIG_IDLE_KILL);
 	idle_spawn_rate = 1;
     }
     else if (idle_count < ap_daemons_min_free) {


> -----Original Message-----
> From: Kostenevich Dmitry [mailto:dansoft@xxxxxxxx]
> Sent: Wednesday, August 01, 2001 12:37 PM
> To: apache-rus@xxxxxxxxxxxxx
> Subject: Re: [apache-rus] баг ???
> 
> 
> с тем, что в apache-rus "вырезана" поддержка cygwin ;-)
> 
> оная легко возвращается путём копирования каталога cygwin из apache в
> apache-rus
> путь что-то типа src/os/cygwin (точно не помню) ... у меня 
> вроде работало.
> Но особо не тестировалось...
> 
> ----- Original Message -----
> From: "Termi 2" <termit@xxxxxxxx>
> To: <apache-rus@xxxxxxxxxxxxx>
> Sent: Wednesday, August 01, 2001 2:17 PM
> Subject: [apache-rus] баг ???
> 
> 
> > Hello apache-rus,
> >
> >   с чем связано нежелание apache_1.3.20rusPL30.5.tar.gz 
> собираться под
> >   CygWin???
> >   в то время как оригинальный apache_1.3.20.tar.gz, как и 
> оригинальный
> >   с наложенными патчами patches_1.3.20rusPL30.5.tar.gz
> >   собирается идеально
> >
> > --
> > Best regards,
> >  Termi                          TNPSviaz system administrator
> >                                      mailto:termit@xxxxxxxx
> >
> >
=============================================================================
=               Apache-Rus@xxxxxxxxxxxxx mailing list                       =
Mail "unsubscribe apache-rus" to majordomo@xxxxxxxxxxxxx if you want to quit.
=       Archive avaliable at http://www.lexa.ru/mail-archive                =







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

[ Russian Apache ] [ Как это работает ] [ Рекомендации ] [ Где взять ] [ Как установить ] [ Как настроить ] [ Статус и поддержка ] [ Краткий обзор ] [ FAQ ] [ Список рассылки ] [ Благодарности ] [ Поиск по серверу ] [ Powered by Russian Apache ] [ Apache-talk archive ]

"Russian Apache" includes software developed by the Apache Group for use in the Apache HTTP server project (http://www.apache.org/) See Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C) 1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.