Gosta do NetBeans? Use o nightly build e ajude os desenvolvedores.

Uma das melhores formas de ajudar os programadores do seu aplicativo preferido é usar a versão em desenvolvimento e permitir o feedback automático do uso ao projeto.
Assim, à medida em que você experimenta os mais novos recursos do aplicativo, ajuda dando retorno à equipe de desenvolvimento sobre o que funciona ou não no programa; sobre o que está bom e o que ainda precisa ser melhorado, antes do lançamento.

O NetBeans é um projeto de código aberto, livre e bem sucedido.

Se você tem interesse em ajudar este (ou qualquer outro projeto) é possível fazê-lo de diversas maneiras: na documentação, na tradução (do programa e da documentação), dando sugestões de melhoria do código, criando plug ins etc.
Todas estas opções pedem algum nível de engajamento com as equipes responsáveis.
Se você apenas quer usar uma versão em desenvolvimento, contudo, não precisa sequer dar o seu nome ou criar uma conta no projeto — basta baixar e usar.

A versão em desenvolvimento convive bem com a versão estável

captura de tela netbeans 8 and nightly
Sim. Você pode ter as duas instaladas no seu computador.

A ideia é que você possa trabalhar e continuar a escrever código usado na produção na IDE estável e testar o seu trabalho, sem correr riscos desnecessários, na nightly build.

A convivência entre as duas versões é pacífica e produtiva — permitindo que os dados de usuário de uma sejam importados para a outra.

Qual a melhor versão de desenvolvimento a ser usada?

Embora seja possível espelhar na sua máquina os repositórios GIT dos desenvolvedores, o ideal, de acordo com as equipes de desenvolvimento, é baixar a nightly build oficial do site.
O que ocorre é que, ao usar a versão dos repositórios há maiores possibilidades de contaminar os relatórios com bugs inválidos, oriundos das configurações particulares do seu sistema.
São versões mais adequadas a quem é desenvolvedor do Netbeans. Então, se quiser ajudar, não faça isso.

Onde baixar o NetBeans nightly build

Na mesma página de downloads “normais”, há um link pra página de downloads das versões em desenvolvimento. Ao final deste artigo, estão disponíveis este e outros links.
site de download do netbeans nightly build
Na página de download oficial do nightly build do NetBeans, há várias distribuições do aplicativo para baixar. Escolha a sua:

  • Java SE
  • Java EE
  • C/C++
  • PHP
  • Tudo (distribuição completa)

Dê um passo a mais

Se você é um usuário avançado do NetBeans e tem fluência no inglês, pode fazer parte do NetCat.

  1. De maneira resumida, o NetCat é um programa para envolver a comunidade de usuários do NetBeans em testes da versão de desenvolvimento do aplicativo.
  2. Os participantes fornecerão feedback sobre a usabilidade do produto, sua qualidade e sua performance.
  3. Em retorno, você terá uma oportunidade de influenciar significativamente a qualidade e os rumos do desenvolvimento da IDE NetBeans.

Os participantes do programa NetCat respondem a questionários e têm suas opiniões levadas em conta nas decisões do projeto.
Entre os benefícios, os participantes com 20 ou mais pontos de atividades, recebem um certificado de reconhecimento de participação no projeto.
Adicionalmente, os 3 maiores contribuidores recebem recomendação oficial no Linkedin.com.
Você pode pontuar por revisar um tutorial, testar uma versão do NetBeans no seu sistema operacional, responder a uma pesquisa de satisfação etc.

Use o script do Luis Lobo

O desenvolvedor Luis Lobo montou um script que faz a busca e o download da última versão do nightly build.
Para usá-lo, abra o seu editor de textos preferido, copie e cole o código abaixo:

#!/bin/bash
echo "Starting compilation..."
DOWN_DIR=~/Downloads/netbeans-nightly
NETBEANS_ZIP=netbeans-nightly.zip
NETBEANS_NIGHTLY_DIR=~/netbeans

echo "Setting up directories..."
mkdir -p $DOWN_DIR
mkdir -p $NETBEANS_NIGHTLY_DIR

echo "Downloading Netbeans Nightly Build..."
cd $DOWN_DIR
lynx -dump http://bits.netbeans.org/download/trunk/nightly/latest/zip | grep http://bits.netbeans.org/download/trunk/nightly/latest/zip/netbeans | awk '{print $2}' | tail -1 | wget -i - --output-document=$DOWN_DIR/$NETBEANS_ZIP

echo "Unzipping Netbeans..."
unzip -uo $DOWN_DIR/$NETBEANS_ZIP -d $NETBEANS_NIGHTLY_DIR

echo "Building Netbeans..."
export ANT_OPTS="-Xmx256m -XX:MaxPermSize=96m"
cd $NETBEANS_NIGHTLY_DIR/nbbuild
ant | tee > build.log

ln -s ~/bin/nbdev $NETBEANS_NIGHTLY_DIR/nbbuild/netbeans/bin/netbeans

echo "All done!"
echo "Current space usage: "
du -hc -d 1 $NETBEANS_NIGHTLY_DIR

No Linux, grave o arquivo com o nome de getNetBeansNightly.sh.
Em seguida, dê ao script permissão de execução e o execute:

chmod aug+x getNetBeansNightly.sh
./getNetBeansNightly.sh

Se tudo correr bem, a IDE deve estar instalada no seu diretório home. Neste caso, pode ser executado com o seguinte comando:

~/netbeans/netbeans/bin/netbeans

A depender da sua distro Linux, pode ser necessário instalar o navegador web Lynx — ele é requerido para a execução do script.
No Debian ou no Ubuntu, você pode usar o apt, para baixar e instalar o Lynx:

sudo apt install lynx

Este script faz bem o serviço. Mas há uma versão mais atual no github do desenvolvedor.
Se quiser remover a versão de desenvolvimento, recém instalada, basta apagar o diretório em que ela se encontra:

rm -vfr ~/netbeans/

Referências

Site oficial de download do NetBeans Nightly Build: http://bits.netbeans.org/download/trunk/nightly/latest/.
Site de download do script: https://github.com/luislobo/Netbeans-Nightly-Build-Script.

Como instalar um servidor LAMP no openSUSE

Um servidor Linux, com serviços Apache, banco de dados MySQL ou MariaDB e a linguagem de scripts PHP é um ambiente muito comum para desenvolvedores web, administradores de servidores web etc.
Há variações para esta configurações.
Alguns administradores ou desenvolvedores preferem usar outros servidores web, que não o Apache. Também podem optar por outro banco de dados que não o MySQL — neste caso, o PostreSQL e o MariaDB são bastante comuns.

A tendência atual de distros como openSUSE, Ubuntu, Fedora, entre outras, é a substituição do MySQL pelo MariaDB

Como opção ao PHP, surgem o Python e o Perl, entre outros.
Neste texto, vamos nos ater ao LAMP tradicional, em uma maquina openSUSE Leap 42.1 — até por que ele é muito fácil de instalar.
Se quiser saber mais sobre como verificar a versão do openSUSE em uso no seu sistema, leia este texto.
Se, posteriormente, quiser acrescentar suporte ao Perl, Python ou Ruby on Rails, isto pode ser feito de modo muito natural.

Como encontrar o padrão de instalação LAMP no openSUSE

A ferramenta zypper, de gestão de pacotes, permite encontrar rapidamente qualquer coisa que esteja dentro dos repositórios do sistema operacional.
Se quiser saber mais sobre o zypper, leia este texto.
No exemplo que segue, a gente começa com um refresh, para sincronizar o nosso cache local com os repositórios remotos. Em seguida faremos uma busca, com o comando search, pelos padrões (patterns) que contenham a string “lamp”. Veja abaixo:

sudo zypper update
zypper search --type pattern lamp
Carregando dados de repositório...
Lendo os pacotes instalados...

S | Nome        | Resumo                   | Tipo  
--+-------------+--------------------------+-------
  | lamp_server | Servidor Internet e LAMP | padrão

Quer obter mais informações sobre o pattern lamp_server?
Use o parâmetro info:

zypper info -t pattern lamp_server
.
Carregando dados de repositório...
Lendo os pacotes instalados...


Informação para padrão lamp_server:
-----------------------------------
Repositório: Repositório principal de atualização
Nome: lamp_server
Versão: 20150918-12.1
Arquitetura: x86_64
Fornecedor:openSUSE
Instaladas: Não
Visível ao Usuário: Sim
Resumo:Servidor Internet e LAMP
Descrição: 
  Programa para configurar um servidor de Internet que possa lidar com conteúdo
  estático, dinâmico e interativo (como uma loja da Internet). Isso inclui o
  servidor HTTP Apache, o sistema de gerenciamento de banco de dados MySQL e
  linguagens de script como PHP, Python, Ruby on Rails ou Perl.
Conteúdo:

S | Nome                          | Tipo    | Dependência
--+-------------------------------+---------+------------
  | apache2                       | package |            
  | apache2-doc                   | package |            
  | apache2-example-pages         | package |            
  | apache2-mod_perl              | package |            
  | apache2-mod_php5              | package |            
  | apache2-mod_python            | package |            
  | apache2-prefork               | package |            
  | mariadb                       | package |            
i | patterns-openSUSE-base        | package |            
  | patterns-openSUSE-lamp_server | package |            
  | php5-ctype                    | package |            
  | php5-dom                      | package |            
  | php5-iconv                    | package |            
  | php5-mysql                    | package |            
  | yast2-http-server             | package |  

Observe que na relação de pacotes a ser instalada, o banco de dados MariaDB é default nesta versão do openSUSE.
Para, enfim, fazer a instalação deste pattern, use o comando install:

sudo zypper install -t pattern lamp_server
root's password:
Carregando dados de repositório...
Lendo os pacotes instalados...
Resolvendo dependências de pacote...

The following 32 NEW packages are going to be installed:
  apache2 apache2-doc apache2-example-pages apache2-mod_dnssd apache2-mod_perl
  apache2-mod_php5 apache2-mod_python apache2-prefork apache2-utils libapr1
  libapr-util1 libmysqlclient18 libmysqlclient_r18 libmysqlcppconn7
  libreoffice-base-drivers-mysql mariadb mariadb-client mariadb-errormessages
  patterns-openSUSE-lamp_server perl-Linux-Pid php5 php5-ctype php5-dom
  php5-iconv php5-json php5-mysql php5-pdo php5-sqlite php5-tokenizer
  php5-xmlreader php5-xmlwriter yast2-http-server

The following NEW pattern is going to be installed:
  lamp_server

The following 18 recommended packages were automatically selected:
  apache2 apache2-doc apache2-example-pages apache2-mod_perl apache2-mod_php5
  apache2-mod_python apache2-prefork mariadb php5-ctype php5-dom php5-iconv
  php5-json php5-mysql php5-sqlite php5-tokenizer php5-xmlreader php5-xmlwriter
  yast2-http-server

32 novos pacotes para instalado.
Tamanho total do download: 22,5 MiB. Já em cache: 0 B. Após a operação, 161,3
MiB adicionais serão utilizados.
deseja continuar? [s/n/? mostrar todas as opções] (s): 

Não se esqueça de ler atenciosamente o texto que segue o processo de instalação e confirmar aonde for apropriado.

Pós instalação

Antes de dar o trabalho por encerrado, vamos testar a instalação.
Comece por verificar o estado atual do (MySQL) MariaDB:

sudo rcmysql status
mysql.service - MySQL server
   Loaded: loaded (/usr/lib/systemd/system/mysql.service; disabled)
   Active: inactive (dead)

Ok. As palavras disabled e dead — respectivamente, “desabilitado” e “morto” — não são muito animadoras.
Então vamos colocar o banco de dados no ar!

sudo rcmysql start
sudo rcmysql status

Agora, a mensagem é outra:

mysql.service - MySQL server
   Loaded: loaded (/usr/lib/systemd/system/mysql.service; disabled)
   Active: active (running) since Sat 2016-05-14 19:42:27 BRT; 4s ago
  Process: 4524 ExecStartPost=/usr/lib/mysql/mysql-systemd-helper wait default (code=exited, status=0/SUCCESS)
  Process: 4514 ExecStartPre=/usr/lib/mysql/mysql-systemd-helper upgrade default (code=exited, status=0/SUCCESS)
  Process: 4423 ExecStartPre=/usr/lib/mysql/mysql-systemd-helper install default (code=exited, status=0/SUCCESS)
 Main PID: 4523 (mysqld)
   CGroup: /system.slice/mysql.service
           └─4523 /usr/sbin/mysqld --defaults-file=/etc/my.cnf --user=mysql

May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB: Initializing buffer pool, size = 128.0M
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB: Completed initialization of buffer pool
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB: Highest supported file format is Barracuda.
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB: 128 rollback segment(s) are active.
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB: Waiting for purge to start
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.26-74.0 started; log sequence number 1616707
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] Server socket created on IP: '::'.
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] /usr/sbin/mysqld: ready for connections.
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: Version: '10.0.22-MariaDB'  socket: '/var/run/mysql/mysql.sock'  port: 3306  openSUSE package
May 14 19:42:27 linux-ewci.suse mysql-systemd-helper[4524]: MySQL is alive

Ajuste a senha do root no MariaDB

Caso você não saiba, o root do banco de dados MySQL/MariaDB é diferente do root do Linux.
Use o seguinte comando, no terminal:

/usr/bin/mysqladmin -u root password 'nova-senha'

Substitua ‘nova-senha’ pela sua senha.

Como baixar e usar imagens prontas do repositório Docker

Neste post introdutório vou mostrar como trabalhar com as imagens do Docker Hub.
Tanto é possível usar imagens prontas, como alterá-las e criar novas a partir do zero.
Esta última opção é voltada para usuários mais avançados.
A primeira, permite que usuários novatos possam trabalhar com imagens feitas por profissionais e que podem ser encontradas no repositório oficial do Docker — ou Docker Hub.
Na primeira vez em que você roda uma imagem do Docker Hub, ela é baixada para o seu computador — o Docker usa a cópia local para trabalhar.
Se você ainda não instalou o Docker, confira estes métodos de instalação.
logo docker com bombas nos contêineres
Use o comando docker images para listar (se houver) imagens armazenadas localmente no seu sistema.
O diretório de armazenamento das suas imagens é o ‘/var/lib/docker’, caso você esteja curioso.

O que é possível encontrar no Docker Hub

É possível baixar uma das várias imagens prontas do repositório do Docker. Entre elas, há de várias distribuições, tais como Ubuntu, CentOS, Arch Linux, Debian etc.
Você pode baixar também uma imagem vazia, adequada para quem deseja um modelo (ou esqueleto) para construir a sua própria, “do zero”.
Entre recursos e funcionalidades, o hub oferece os seguintes itens:

  • Repositórios de imagens — encontre, gerencie, armazene suas imagens e baixe outras – da comunidade, privadas ou oficiais.
  • Builds automatizados — crie novas imagens automaticamente durante a mudança de repositório fonte GitHub/Bitbucket.
  • Webhooks — um dos recursos dos builds automatizados, permite disparar ações programadas após uma transferência de sucesso a um repositório.
  • Organizações — cria grupos de trabalho para gerenciar acesso de usuário a repositórios de imagens.
  • Integração ao GitHub e ao Bitbucket — adiciona o Hub e suas imagens Docker ao seu fluxo de trabalho (workflow) atual.

Você pode buscar e baixar imagens públicas do Docker Hub livremente.
Contudo, para enviar e armazenar suas imagens no hub é necessário ter uma conta e assinar o serviço.

Como acessar os repositórios de imagens do Docker

O Hub oferece um local onde desenvolvedores podem montar e armazenar imagens Docker — que podem ser distribuídas publicamente ou apenas dentro da sua equipe de trabalho.
Você pode fazer uma busca por imagens no repositório público com o comando search. Veja um exemplo de busca por imagens relacionadas a distro Linux CentOS:

docker search centos
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                        The official build of CentOS.                   1960      [OK]       
jdeathe/centos-ssh            CentOS-6 6.7 x86_64 / SCL/EPEL/IUS Repos /...   15                   [OK]
million12/centos-supervisor   Base CentOS-7 with supervisord launcher, h...   9                    [OK]
blalor/centos                 Bare-bones base CentOS 6.5 image                8                    [OK]
nimmis/java-centos            This is docker images of CentOS 7 with dif...   7                    [OK]
torusware/speedus-centos      Always updated official CentOS docker imag...   7                    [OK]
centos/mariadb55-centos7                                                      3                    [OK]
nathonfowlie/centos-jre       Latest CentOS image with the JRE pre-insta...   3                    [OK]
nickistre/centos-lamp         LAMP on centos setup                            3                    [OK]
consol/sakuli-centos-xfce     Sakuli end-2-end testing and monitoring co...   2                    [OK]
feduxorg/centos-postgresql    Centos Image with postgres                      1                    [OK]
softvisio/centos              Centos                                          1                    [OK]
layerworx/centos              CentOS container with etcd, etcdctl, confd...   1                    [OK]
darksheer/centos              Base Centos Image -- Updated hourly             1                    [OK]
lighthopper/orientdb-centos   A Dockerfile for creating an OrientDB imag...   1                    [OK]
yajo/centos-epel              CentOS with EPEL and fully updated              1                    [OK]
ericuni/centos                centos dev                                      0                    [OK]
blacklabelops/centos          CentOS Base Image! Built and Updates Daily!     0                    [OK]
ustclug/centos                 USTC centos                                    0                    [OK]
januswel/centos               yum update-ed CentOS image                      0                    [OK]
jsmigel/centos-epel           Docker base image of CentOS w/ EPEL installed   0                    [OK]
grayzone/centos               auto build for centos.                          0                    [OK]
lighthopper/openjdk-centos    A Dockerfile for creating an OpenJDK image...   0                    [OK]
insaneworks/centos            CentOS 6.5 x86_64 + @update                     0                    [OK]
timhughes/centos              Centos with systemd installed and running       0                    [OK]

Você também pode fazer uma busca no website oficial do Docker. Repositórios privados não serão listados.
No próximo exemplo vou mostrar como baixar uma imagem do Alpine Linux:

docker pull alpine

Veja o resultado do meu download, abaixo:

latest: Pulling from library/alpine
ee54741ab35b: Pull complete 
Digest: sha256:24a36bbc059b1345b7e8be0df20f1b23caa3602e85d42fff7ecd9d0bd255de56
Status: Downloaded newer image for alpine:latest

Neste momento, já é possível ver a imagem na relação de disponíveis localmente:

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              latest              90239124c352        9 days ago          4.79 MB

O Alpine é uma distro GNU/Linux construída em torno das bibliotecas musl, libc e do Busybox.
Estas características permitem que seja bastante pequena e muito eficiente em termos de uso de recursos do sistema.
Para rodar no Docker, o contêiner não requer mais do que 8 MB.

Para rodar a imagem, use o comando run.
Uma vez que o Alpine é baseado no Busybox, é fácil iniciar esta imagem rodando-o:

docker run -t -i alpine busybox

Dá para fazer mais do que isto.
Nos exemplos abaixo, determinamos a versão do Alpine em uso no contêiner:

docker run -t -i alpine cat /etc/alpine-release
3.3.1

Quando uma imagem não é encontrada localmente, ela é baixada automaticamente, pelo Docker.
Se você quiser rodar uma shell dentro do contêiner Alpine, use o ash (semelhante ao Bash):

docker run -t -i alpine /bin/ash

Como rodar um servidor LAMP dentro do Docker

Eu sei, eu sei… este assunto merece um post só para ele — ainda assim, insisto em usar este exmplo pra ilustrar a utilidade das imagens prontas do Docker. 😉
Você pode montar o seu próprio servidor LAMP dentro do Docker. Mas também pode baixar uma imagem em que ele já venha pronto.
Neste caso, sugiro a imagem do usuário nickistre, com o CentOS rodando um servidor Linux, Apache, MySQL e PHP.
Baixe a imagem e veja como proceder:

docker pull nickistre/centos

A seguir rode a imagem, com o comando ifconfig (para você saber exatamente em qual IP encontrar o servidor)

docker run -t -i nickistre/centos-lamp ifconfig

Veja o meu resultado:

eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:3/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:90 (90.0 b)  TX bytes:180 (180.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Na segunda linha, acima, se encontra o endereço IP, que eu devo acessar, do meu navegador: inet addr:172.17.0.3
Coloque-o no ar e acesse o IP informado no seu navegador favorito:

docker run -t -i nickistre/centos-lamp

Apache server running on CentOS
Esta é uma entre várias formas de se usar imagens prontas em contêineres Docker.
Desenvolvedores web podem achar mais interessante rodar seus servidores desta forma, do que instalar o LAMP inteiro em sua máquina — além de tudo, este método permite alterar e testar diferentes configurações do servidor, sem bagunçar o seu sistema.

Referẽncias

Como instalar e usar o Docker.
https://docs.docker.com/docker-hub/overview/.
http://www.alpinelinux.org/about/.

Como configurar o módulo mpm prefork para melhorar a performance do servidor web Apache

Ao concluir a instalação do seu servidor web Apache, pode ser interessante realizar alguns ajustes na sua configuração para obter um melhor desempenho ou adequá-lo às condições de hardware e de uso.
Neste post, vou mostrar como ajustar o mpm_prefork.conf do Apache.
apache-feather-logo-24colors
As informações contidas neste post foram testadas em um sistema operacional Debian 8.2 “jessie”, com o servidor web Apache 2.4 padrão da distribuição — e servem para Ubuntu 14.04 LTS (ou superior) também.
Outras diretivas e parâmetros de configuração, presentes no Apache, precisam ser incluídas no ato da compilação do software — e, portanto, não serão abordados neste texto.
Para saber a versão do seu servidor Apache, use o seguinte comando:

sudo apache2 -v
Server version: Apache/2.4.10 (Debian)
Server built:   Aug 28 2015 16:28:08

O que é o MPM prefork do Apache?

MPM é sigla para Multi-Processing Module ou Módulo de Processamento Múltiplo (em uma tradução livre).
É responsável pela implementação de um servidor web sob a “metodologia” non-threaded, em um servidor pre-forking, que lida com as requisições de modo similar ao do Apache 1.3. (Veja o quadro ao final deste texto)
É apropriado para sites que precisam evitar a criação de threads, para manter compatibilidade com bibliotecas non-thread-safe (PHP, por exemplo…).
O MPM é autorregulado, de modo que raramente é necessário ajustar diretivas de configuração.

O conteúdo do arquivo mpm_prefork.conf

Para ver o conteúdo do arquivo de configuração, tema deste artigo, use o comando cat.
O conteúdo do meu arquivo mpm_prefork.conf (tirando os comentários) é o que segue:

cat /etc/apache2/mods-enabled/mpm_prefork.conf
#
<IfModule mpm_prefork_module>
	StartServers			5
	MinSpareServers			5
	MaxSpareServers			10
	MaxRequestWorkers		150
	MaxConnectionsPerChild  	0
</IfModule>

Estes são os valores originais.
O significado de cada uma destas linhas de configuração é o que segue:

  • StartServers — número de processos do servidor para iniciar
  • MinSpareServers — quantidade mínima de processos do servidor a ser reservada
  • MaxSpareServers — quantidade máxima de processos do servidor a ser reservada
  • MaxRequestWorkers — número máximo de processos do servidor permitidos para iniciar.
    Em versões anteriores ao Apache 2.4, era chamado de MaxClients
  • MaxConnectionsPerChild — número máximo de requisições que um processo do servidor deve atender

Como funciona o MPM

Um único processo é responsável pelo lançamento dos processos filhos, que ouvem as conexões e as atendem, quando chegam.
O Apache sempre tenta manter vários processos do servidor em reserva, prontos a atender novas requisições — desta forma, economiza tempo para criar novos processos filhos (forking) para atender a novas requisições.
As diretivas StartServers, MinSpareServers, MaxSpareServers e MaxRequestWorkers controlam o modo como os processos pais criam novos processos filhos para servir às novas requisições.
Em geral, o Apache é bom em se autorregular em função da demanda, de modo que muitos administradores de sites não vão precisar ajustar estas diretivas.
Manter os valores padrão é o recomendado para a maioria, portanto.
Sites que precisam servir mais do que 256 requisições simultâneas, contudo, podem precisar aumentar o valor de MaxRequestWorkers.
Caso os recursos de memória sejam limitados, pode ser necessário reduzir este valor para prevenir que o servidor faça thrashing — ou seja, faça uso da memória swap em disco (o que vai ocasionar um problema severo de lentidão).

O mais importante é que o MaxRequestWorkers seja grande o suficiente para comportar a quantidade de requisições simultâneas que você espera receber.
Ao mesmo tempo, o valor desta diretiva deve ser pequeno o suficiente para assegurar que haja memória RAM física suficiente para todos os processos.

Enquanto o processo pai é costumeiramente iniciado como root (UNIX e GNU/Linux) para se conectar à porta 80, os processos filhos são iniciados pelo Apache com privilégios de usuário comum.
As diretivas de Usuário e Grupo são usados para ajustar os privilégios dos processos filhos do Apache — que só precisam estar habilitados a ler aquele conteúdo que será servido.
A diretiva MaxRequestsPerChild controla a frequencia com que o servidor recicla processos, matando os velhos e criando novos.

A diretiva StartServers

Este parâmetro ajusta o número de processos filhos que devem ser criados na inicialização do Apache.
Uma vez que este número é controlado dinamicamente, em função da carga de trabalho do servidor web, geralmente há poucas razões para alterar este número.

A diretiva MaxSpareServers

O valor padrão desta diretiva é 10, de acordo com a documentação oficial do Apache (link no final do texto).
Este parâmetro determina o número máximo de processos ociosos do servidor.
É denominado processo ocioso aquele que não esteja trabalhando com alguma requisição.
O processo pai vai ‘matar’ os processos filhos ociosos, assim que sua quantidade exceder o limite determinado em MaxSpareServers.
Ajustar este parâmetro só é necessário em sites muito ocupados.
Se você ajustar o valor deste parâmetro para um número igual ou menor do que o valor de MinSpareServers, o Apache irá automaticamente reajustá-lo para MinSpareServers + 1.

Ajustar os parâmetros MinSpareServers e MaxSpareServers para valores extremos é quase sempre uma idéia ruim.
Ao fazer isto, você adiciona ao servidor um excesso de carga de trabalho ou overhead, por que ele precisará terminar/iniciar, sem necessidade, os workers de reserva em execução no background.

A diretiva MinSpareServers

Esta variável ajusta o número desejado de processos filhos ociosos do servidor.
Como você já sabe, processo ocioso é aquele que não está lidando com alguma requisição.
Havendo menos destes processos do que a quantidade determinada em MinSpareServers, o processo pai irá iniciar a criação de novos processos filhos, a uma taxa máxima de 1 por segundo.

A diretiva MaxConnectionsPerChild

Delimita o número de conexões com que cada processo filho pode trabalhar individualmente.
Após atingir o valor definido em MaxConnectionsPerChild, o processo filho irá terminar (morrer).
Você pode ajustar o valor para 0 (zero), se quiser que o processo nunca expire.
Ao usar valores diferentes de 0, contudo, você vai limitar a quantidade de memória que cada processo poderá consumir em caso de vazamento acidental de memória.

Conclusão

Quando terminar de configurar estes parâmetros, não use o reload para reiniciar o Apache.
O certo é parar o servidor e, em seguida, iniciá-lo.
A razão disto é que nem todas as mudanças farão efeito até que você desligue o processo principal (inicial) do Apache.
No Debian, use o seguinte comando para isto:

sudo service apache2 stop
sudo service apache2 start
sudo service apache2 status

O resultado do último comando deve ser parecido com o que segue:

● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2)
   Active: active (running) since Sex 2015-12-04 10:00:49 BRT; 1min 7s ago
  Process: 7399 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 6561 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
  Process: 7451 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/apache2.service
           ├─7465 /usr/sbin/apache2 -k start
           ├─7469 /usr/sbin/apache2 -k start
           ├─7470 /usr/sbin/apache2 -k start
           ├─7471 /usr/sbin/apache2 -k start
           ├─7472 /usr/sbin/apache2 -k start
           ├─7473 /usr/sbin/apache2 -k start
           └─7474 /usr/sbin/apache2 -k start

Dez 04 10:00:48 ultra apache2[7451]: Starting web server: apache2AH00558:...e
Dez 04 10:00:49 ultra apache2[7451]: .
Hint: Some lines were ellipsized, use -l to show in full.

O que são Non-threaded e Pre-fork no Apache?

Servidores web diferentes, tem diversas técnicas de manipulação das requisições HTTP em paralelo.
Uma das metodologias mais populares envolve o uso de threads — ou seja, o servidor web vai criar/dedicar uma única thread a cada nova requisição recebida.
O servidor web Apache suporta múltiplos modelos de tratamento de requisições — um deles, o MPM, usa threads.
Além disto, suporta um outro modelo chamado prefork MPM, que usa processos — no qual o servidor web cria/dedica um único processo a cada nova requisição.

Referências:

https://httpd.apache.org/docs/2.2/mod/prefork.html.
http://askubuntu.com/questions/488044/neither-prefork-nor-worker-settings-are-found-in-etc-apache2-apache2-conf-why.
http://wiki.zarafa.com/index.php/Apache_tuning.
http://stackoverflow.com/questions/1623914/what-is-thread-safe-or-non-thread-safe-in-php.
http://serverfault.com/questions/684424/how-to-tune-apache-on-ubuntu-14-04-server.

Como instalar o PHP 7.0 no Ubuntu 14.04 e no Debian 8

O PHP 7.0 é, provavelmente, a próxima grande sensação do início do ano de 2016, quando a versão final será lançada — previsto pra Março.
Os primeiros RC (Release Candidates) têm previsão de lançamento a partir de Junho de 2016.
Neste artigo, eu vou mostrar como instalar a versão beta, para você já poder testar os novos recursos da linguagem e verificar sua impressionante velocidade.

Eu sei que não estou escrevendo para crianças, mas… é sempre bom frisar que software em fase beta, não deve ser instalado em máquinas de produção — nem nos servidores, nem no seu notebook ou desktop de trabalho.

Logo unofficial PHP 7
O PHP 7.0, no momento em que estou escrevendo, conflita com o PHP 5.x — portanto, só será possível ter um dos dois instalado em seu sistema.
Eu testei a instalação, com sucesso, no Debian 8.2 “Jessie”, e Apache 2.4 — segundo desenvolvedores, há conflito com versões anteriores do Apache.
Os desenvolvedores afirmam, contudo, que o procedimento funciona para o Ubuntu 14.04 LTS.

Como configurar o sistema, baixar e instalar os pacotes do PHP 7

Nos procedimentos que seguem, vamos configurar o arquivo sources.list (não sem antes fazer um backup) para ele passar a buscar informações dos repositórios contendo os pacotes do PHP7.
Em seguida, vamos configurar a chave gpg e atualizar os repositórios.
Feito isto, o sistema já estará pronto para receber o novo PHP 7.0.
Comece com o backup:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup-2015-11-17

Acrescente as seguintes linhas ao final do arquivo /etc/apt/sources.list:

# dotdeb PHP7 repositórios
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Vamos à configuração da chave gpg…

wget https://www.dotdeb.org/dotdeb.gpg
sudo apt-key add dotdeb.gpg

Agora, atualize os repositórios e instale o PHP 7:

sudo apt-get update
sudo aptitude install php7.0

Divirta-se!

Referências:

https://wiki.php.net/rfc/php7timeline.
https://www.dotdeb.org/instructions/.