Infrastructure

Instalação da Infraestrutura

Para informações sobre a instalação do cliente, ver “Instalação Cliente”.

Para informações sobre NAT, DHCP e port-forward, ver “NAT com Ubuntu 16.odt”.

Instalação do SO

Crie uma máquina virtual e instale o Ubuntu Server (sem interface gráfica) no modo padrão. Conecte a interface de rede no switch LAN Swtich através da rede LAN.

Configuração do ambiente

Habilite o uso de sudo sem precisar informar a senha. Edite o arquivo de configuração do sudo com o comando abaixo:

$ sudo visudo

e acrescente a seguinte linha no final do arquivo (precisa refazer login):

cliente ALL=(ALL) NOPASSWD: ALL

Atualize o sistema operacional:

$ sudo apt update

$ sudo apt -y upgrade

$ sudo apt -y autoremove

Instale o servidor de SSH através do comando:

$ sudo apt -y install openssh-server

Configure a interface de rede para trabalhar com IP fixo.

Ubuntu 18.04 ou mais recente

Editar o arquivo /etc/netplan/50-cloud-init.yaml com o comando a seguir:

$ sudo cp /etc/netplan/50-cloud-init.yaml{,.velho}

$ sudo vi /etc/netplan/50-cloud-init.yaml

O arquivo deverá se parecer com o texto a seguir:

# This file is generated from information provided by

# the datasource. Changes to it will not persist across an instance.

# To disable cloud-init's network configuration capabilities, write a file

# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:

# network: {config: disabled}

network:

ethernets:

ens3:

addresses: [172.16.3.202/24]

gateway4: 172.16.3.1

dhcp4: no

nameservers:

addresses: [139.82.16.3, 10.8.0.1]

version: 2

Use o comando a seguir para ativar a configuração:

$ sudo netplan apply

Ubuntu 16.04 ou anteriores

Editar o arquivo /etc/network/interfaces:

$ sudo cp /etc/network/interfaces{,.velho}

$ sudo vi /etc/network/interfaces

Incluir como conteúdo o seguinte texto:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).


source /etc/network/interfaces.d/*


# The loopback network interface

auto lo

iface lo inet loopback


# The primary network interface

auto ens160

iface ens160 inet static

address 172.16.1.202

netmask 255.255.255.0

network 172.16.1.0

broadcast 172.16.1.255

gateway 172.16.1.1

dns-nameservers 139.82.16.3

dns-search inf.puc-rio.br

(TODOS)

Configure o acesso à obaluae.inf.puc-rio.br. Crie a chave de acesso com o comando a seguir aceitando todas as opções:

$ ssh-keygen

$ ssh-copy-id -i .ssh/id_rsa.pub meslin@obaluae.inf.puc-rio.br

Configure o arquivo de hosts. Edite o arquivo /etc/hosts:

$ sudo cp /etc/hosts{,.velho}

$ sudo vi /etc/hosts

Inclua as seguintes linhas:

# Endereços do MUSANet

172.16.1.202 ContextNet1

172.16.2.202 ContextNet2

172.16.3.202 ContextNet3

172.16.4.202 ContextNet4


172.16.0.211 cliente1

172.16.0.212 cliente2

172.16.0.213 cliente3

172.16.0.214 cliente4

Instalação de Java

No momento que esse documento foi gerado, o ContextNet somente era compatível com Java 8 da Oracle. Para instalar o Java 8 da Oracle, utilize os seguintes comandos:

$ sudo add-apt-repository ppa:webupd8team/java

$ sudo apt-get update

$ sudo apt install -y oracle-java8-installer

Para configurar a variável de ambiente JAVA_HOME, obtenha o local de instalação do java e depois edite o arquivo de variáveis de ambiente com os seguintes comandos:

$ sudo update-alternatives --config java

There is 1 choice for the alternative java (providing /usr/bin/java).


Selection Path Priority Status

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

0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 auto mode

* 1 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode


Press <enter> to keep the current choice[*], or type selection number: ^C

$ sudo cp /etc/environment{,.velho}

$ sudo vi /etc/environment

E inclua a seguinte linha ao final do arquivo (verifique a path obtida com o comando anterior):

JAVA_HOME="/usr/lib/jvm/java-8-oracle"

Se você não quiser instalar o Java 8 da Oracle, instale o Java JDK default com o comando a seguir:

$ sudo apt -y install default-jdk

Libere mais portas UDP efêmeras editando o arquivo /etc/sysctl.conf:

$ ulimit -n 65535

$ sudo cp /etc/sysctl.conf{,.velho}

$ sudo vi /etc/sysctl.conf

Inclua as seguintes linhas ao final do arquivo (atenção aos espaços em branco antes e depois do sinal de igual):

net.ipv4.ip_local_port_range = 1025 65000

net.ipv4.tcp_fin_timeout = 1

Depois de reiniciar a máquina, verifique qual a faixa de portas que está disponível com o seguinte comando:

$ sysctl net.ipv4.ip_local_port_range

net.ipv4.ip_local_port_range = 1025 65000

Opcionalmente remova o screensaver (tela preta) editando o arquivo grub com o comando a seguir:

$ sudo cp /etc/default/grub{,.velho}

$ sudo vi /etc/default/grub

Modifique a linha com GRUB_CMDLINE_LINUX_DEFAULT="" de acordo com o texto a seguir:

GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"

Atualize o grub como seguinte comando:

$ sudo update-grub

Instalação e configuração do ContextNet

Instale o OpenSplice. Instruções mais detalhadas em http://www.lac.inf.puc-rio.br/dokuwiki/doku.php?id=installingdds.

Faça download (ou upload) do arquivo OpenSpliceDDSV6.4.140407OSS-HDE-x86_64.linux-gcc4.6-glibc2.15-installer.tar.gz ou VortexOpenSplice-6.9.181127OSS-HDE-x86_64.linux-gcc5.4.0-glibc2.23-installer.tar.gz.

Descompacte o arquivo, crie o diretório /opt/OpenSplice e copie o diretório HDE para /opt/OpenSplice

$ tar -xvf OpenSpliceDDSV6.4.140407OSS-HDE-x86_64.linux-gcc4.6-glibc2.15-installer.tar.gz

$ tar -xvzf VortexOpenSplice-6.9.181127OSS-HDE-x86_64.linux-gcc5.4.0-glibc2.23-installer.tar.gz

$ sudo mkdir /opt/OpenSplice

$ sudo mv HDE /opt/OpenSplice/

$ sudo mkdir /opt/OpenSplice-69

$ sudo mv HDE/ /opt/OpenSplice-69/

$ sudo ln -s /opt/OpenSplice-69/ /opt/OpenSplice

O resultado será:

$ ls -l /opt/OpenSplice-69/

total 4

drwxrwxr-x 3 contextnet contextnet 4096 Apr 14 2014 HDE

Crie um arquivo vazio chamado opensplice.sh e torne o arquivo executável:

$ sudo vi /etc/profile.d/opensplice.sh

$ sudo chmod +x /etc/profile.d/opensplice.sh

Copie o seguinte conteúdo para dentro do arquivo:

OSPL_HOME=/opt/OpenSplice/HDE/x86_64.linux

PATH=$OSPL_HOME/bin:$PATH

LD_LIBRARY_PATH=$OSPL_HOME/lib${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH

CPATH=$OSPL_HOME/include:$OSPL_HOME/include/sys:${CPATH:=}

OSPL_URI=file://$OSPL_HOME/etc/config/ospl.xml

export OSPL_HOME PATH LD_LIBRARY_PATH CPATH OSPL_TMPL_PATH OSPL_URI

Edite o arquivo /opt/OpenSplice/HDE/x86_64.linux/etc/config/ospl.xml:

$ sudo cp /opt/OpenSplice/HDE/x86_64.linux/etc/config/ospl.xml{,.velho}

$ sudo vi /opt/OpenSplice/HDE/x86_64.linux/etc/config/ospl.xml

Substitua o seu conteúdo pelo texto a seguir. Note que os itens em itálico devem ser modificados de acordo com a máquina onde o OpenSplice está instalado. Os itens sublinhados foram modificados para permitir a descoberta de pares utilizando-se pacotes unicast.

<OpenSplice>

<Domain>

<Name>ospl_sp_ddsi</Name>

<Id>0</Id>

<SingleProcess>true</SingleProcess>

<Service name="ddsi2">

<Command>ddsi2</Command>

</Service>

<Service name="durability">

<Command>durability</Command>

</Service>

<Service enabled="false" name="cmsoap">

<Command>cmsoap</Command>

</Service>

<Listeners>

<StackSize>256000</StackSize>

</Listeners>

</Domain>


<DDSI2Service name="ddsi2">

<General>

<NetworkInterfaceAddress>172.16.1.202</NetworkInterfaceAddress>

<AllowMulticast>false</AllowMulticast>

<EnableMulticastLoopback>false</EnableMulticastLoopback>

<CoexistWithNativeNetworking>false</CoexistWithNativeNetworking>

</General>

<Compatibility>

<!-- see the release notes and/or the OpenSplice configurator on DDSI interoperability -->

<StandardsConformance>lax</StandardsConformance>

<!-- the following one is necessary only for TwinOaks CoreDX DDS compatibility -->

<!-- <ExplicitlyPublishQosSetToDefault>true</ExplicitlyPublishQosSetToDefault> -->

</Compatibility>

<!-- The Discovery section was included by me to allow UNICAST discovery-->

<Discovery>

<Peers>

<Peer address="172.16.1.202"/>

<Peer address="172.16.2.202"/>

<Peer address="172.16.3.202"/>

<Peer address="172.16.4.202"/>

<Peer address="172.16.5.202"/>

<Peer address="172.16.6.202"/>

<Peer address="172.16.7.202"/>

<Peer address="172.16.8.202"/>

<Peer address="172.16.9.202"/>

<Peer address="172.16.10.202"/>

</Peers>

</Discovery>

</DDSI2Service>

<DurabilityService name="durability">

<Network>

<Alignment>

<TimeAlignment>false</TimeAlignment>

<RequestCombinePeriod>

<Initial>2.5</Initial>

<Operational>0.1</Operational>

</RequestCombinePeriod>

</Alignment>

<WaitForAttachment maxWaitCount="10">

<ServiceName>ddsi2</ServiceName>

</WaitForAttachment>

</Network>

<NameSpaces>

<NameSpace name="defaultNamespace">

<Partition>*</Partition>

</NameSpace>

<Policy alignee="Initial" aligner="true" durability="Durable" nameSpace="defaultNamespace"/>

</NameSpaces>

</DurabilityService>

<TunerService name="cmsoap">

<Server>

<PortNr>Auto</PortNr>

</Server>

</TunerService>

</OpenSplice>

Ou então a versão datacenter:

<OpenSplice>

<Domain>

<Name>ospl_sp_ddsi</Name>

<Id>0</Id>

<SingleProcess>true</SingleProcess>

<Service name="ddsi2">

<Command>ddsi2</Command>

</Service>

<Service name="durability">

<Command>durability</Command>

</Service>

<Service enabled="false" name="cmsoap">

<Command>cmsoap</Command>

</Service>

<Listeners>

<StackSize>256000</StackSize>

</Listeners>

</Domain>

<DDSI2Service name="ddsi2">

<General>

<NetworkInterfaceAddress>AUTO</NetworkInterfaceAddress>

<AllowMulticast>true</AllowMulticast>

<EnableMulticastLoopback>true</EnableMulticastLoopback>

<CoexistWithNativeNetworking>false</CoexistWithNativeNetworking>

</General>

<Compatibility>

<!-- see the release notes and/or the OpenSplice configurator on DDSI interoperability -->

<StandardsConformance>lax</StandardsConformance>

<!-- the following one is necessary only for TwinOaks CoreDX DDS compatibility -->

<!-- <ExplicitlyPublishQosSetToDefault>true</ExplicitlyPublishQosSetToDefault> -->

</Compatibility>

</DDSI2Service>

<DurabilityService name="durability">

<Network>

<Alignment>

<TimeAlignment>false</TimeAlignment>

<RequestCombinePeriod>

<Initial>2.5</Initial>

<Operational>0.1</Operational>

</RequestCombinePeriod>

</Alignment>

<WaitForAttachment maxWaitCount="10">

<ServiceName>ddsi2</ServiceName>

</WaitForAttachment>

</Network>

<NameSpaces>

<NameSpace name="defaultNamespace">

<Partition>*</Partition>

</NameSpace>

<Policy alignee="Initial" aligner="true" durability="Durable" nameSpace="defaultNamespace" />

</NameSpaces>

</DurabilityService>

<TunerService name="cmsoap">

<Server>

<PortNr>Auto</PortNr>

</Server>

</TunerService>

</OpenSplice>

IMPORTANTE: o ContextNet v2.5 é compatível somente com o OpenSplice v6.4. Para utilizar o OpenSplice v6.7, é necessário o ContextNet 2.7.

Crie o diretório /opt/ContextNet e copie o ContextNet e o ClientLib para lá com os seguintes comandos:

$ sudo mkdir /opt/ContextNet

$ sudo scp cloud-di@172.16.0.1:Downloads/Contextnet/contextnet-2.5.jar /opt/ContextNet

$ sudo scp cloud-di@172.16.0.1:Downloads/Contextnet/udilib.jar /opt/ContextNet

$ sudo scp cloud-di@172.16.0.1:Downloads/udilib.jar /opt/ContextNet

Resultado:

$ ls -l /opt/

total 8

drwxrwxr-x 2 contextnet contextnet 4096 Apr 15 19:14 ContextNet

drwxr-xr-x 3 root root 4096 Apr 15 18:59 OpenSplice

Opcionalmente, para evitar a mensagem de erro ao iniciar o Gateway do ContextNet, instale a biblioteca SIGAR. Faça upload (ou download) da biblioteca hyperic-sigar-1.6.4.zip ou equivalente para o host a partir de https://sourceforge.net/projects/sigar/files/. Descompacte, mova e muda as permissões com os comandos a seguir (pode ser necessário instalar o unzip):

$ scp cloud-di@172.16.0.1:Downloads/hyperic-sigar-1.6.4.zip .

$ unzip hyperic-sigar-1.6.4.zip

$ sudo mv hyperic-sigar-1.6.4/sigar-bin/lib/*.so /opt/OpenSplice/HDE/x86_64.linux/lib/

$ sudo chmod 775 /opt/OpenSplice/HDE/x86_64.linux/lib/libsigar-*

Instalação do InterSCity

Descrito em https://gitlab.com/smart-city-software-platform/dev-env

Descrito em https://gitlab.com/interscity/interscity-platform/dev-env

Crie o diretório de instalação com o comando a seguir:

$ sudo mkdir /opt/InterSCity

$ cd /opt/InterSCity

Docker

Descrito em https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/#install-docker-ce-1

Descrito em em https://docs.docker.com/install/linux/docker-ce/ubuntu/.

Comandos:

$ sudo apt update

$ sudo apt -y upgrade

$ sudo apt -y install linux-image-extra-$(uname -r) linux-image-extra-virtual

$ sudo apt -y install apt-transport-https ca-certificates curl software-properties-common

$ sudo apt -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

OK

$ sudo apt-key fingerprint 0EBFCD88


pub 4096R/0EBFCD88 2017-02-22

Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

uid Docker Release (CE deb) <docker@docker.com>

sub 4096R/F273FCD8 2017-02-22


$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

$ sudo apt update

$ sudo apt -y install docker-ce

$ sudo apt -y install docker-ce docker-ce-cli containerd.io

Para testar a instalação:

$ sudo docker run hello-world

Unable to find image 'hello-world:latest' locally

latest: Pulling from library/hello-world

ca4f61b1923c: Pull complete

Digest: sha256:083de497cff944f969d8499ab94f07134c50bcf5e6b9559b27182d3fa80ce3f7

Status: Downloaded newer image for hello-world:latest


Hello from Docker!

This message shows that your installation appears to be working correctly.


To generate this message, Docker took the following steps:

1. The Docker client contacted the Docker daemon.

2. The Docker daemon pulled the "hello-world" image from the Docker Hub.

(amd64)

3. The Docker daemon created a new container from that image which runs the

executable that produces the output you are currently reading.

4. The Docker daemon streamed that output to the Docker client, which sent it

to your terminal.


To try something more ambitious, you can run an Ubuntu container with:

$ docker run -it ubuntu bash


Share images, automate workflows, and more with a free Docker ID:

https://cloud.docker.com/


For more examples and ideas, visit:

https://docs.docker.com/engine/userguide/

Docker Compose

Descrito em https://docs.docker.com/compose/install/.

$ sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

Para completar o código:

$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.16.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

Para testar a instalação

$ docker-compose --version

docker-compose version 1.16.1, build 1719ceb

InterSCity

Descrito em https://gitlab.com/smart-city-software-platform/dev-env.

Setup:

$ sudo git clone https://gitlab.com/interscity/interscity-platform/dev-env

$ sudo git clone https://gitlab.com/smart-city-software-platform/dev-env

$ cd dev-env

$ sudo git submodule init

$ sudo git submodule update

$ ./project setup

Executar:

$ sudo docker network create platform

34eebf6dfed990e26f5b6f644bcff2f4c774c2e40085c3eae0254cb41fc4cd99

Iniciar o projeto dentro do diretório /opt/InterSCity/dev-env:

$ ./project start

Para testar o projeto, execute o comando a seguir. A resposta deverá ser uma lista de capabilities previamente configurada no InterSCity:

$ curl -X GET "http://localhost:8000/catalog/capabilities"

{"capabilities":[{"id":1,"name":"air-quality","function":0,"description":null},{"id":2,"name":"air-humidity","function":0,"description":null},{"id":3,"name":"parking-occupancy","function":0,"description":null},{"id":4,"name":"video","function":0,"description":null},{"id":5,"name":"queue-length","function":0,"description":null},{"id":6,"name":"semaphore","function":1,"description":null},{"id":7,"name":"illuminate","function":1,"description":null},{"id":8,"name":"parking-type","function":2,"description":null},{"id":9,"name":"current_users","function":0,"description":null},{"id":10,"name":"info_facility_type","function":2,"description":null},{"id":11,"name":"info_total_capacity","function":2,"description":null},{"id":12,"name":"spot_availability","function":0,"description":null},{"id":13,"name":"availability_schedules","function":0,"description":null},{"id":14,"name":"humidity","function":0,"description":null},{"id":15,"name":"temperature","function":0,"description":null},{"id":16,"name":"uv","function":0,"description":null},{"id":17,"name":"pollution","function":0,"description":null},{"id":18,"name":"info_green_percentage","function":2,"description":null},{"id":19,"name":"traffic_speed","function":0,"description":null},{"id":20,"name":"traffic_density","function":0,"description":null},{"id":21,"name":"traffic_light_status","function":1,"description":null},{"id":22,"name":"arduino_traffic_light","function":1,"description":null},{"id":23,"name":"arduino_luminosity","function":1,"description":null},{"id":24,"name":"location","function":0,"description":null}]}

Se, ao testar o projeto, ocorrer um erro com a seguinte mensagem

{"message":"no API found with those values"}

Execute os seguintes passos (ao ser perguntado, confirme positivamente):

$ cd dev-env

$ sudo git pull origin master

$ sudo git submodule foreach git pull origin master

$ cd kong-api-gateway

$ sudo docker exec -it kong /bin/bash

# kong migrations reset

# kong migrations up

# exit

$ cd ..

$ ./project stop

$ ./project start

Para iniciar o projeto automaticamente ao término do boot da máquina, incluir a seguinte linha no final do /etc/rc.local:

( cd /opt/InterSCity/dev-env ; ./project start )

Para executar testes, é necessário instalar os seguintes pacotes e executar o comando:

$ sudo apt -y install moreutils shunit2

$ ./project test

Resource Adaptor

https://social.stoa.usp.br/poo2016/forum-projeto-cidades-inteligentes/resource-adaptor

Executando o MUSANet

Gateway

Executar o gateway:

$ java -jar /opt/ContextNet/contextnet-2.5.jar 192.160.0.12 5500 OpenSplice

Benchmark

Criar o diretório Benchmark

$ mkdir Benchmark

Copiar o Define Group, o arquivo de nomes de coordenadas e as coordenadas para realizar o benchmark:

$ scp 172.16.0.1:Downloads/BenchmarkDefineGroup.jar Benchmark

$ scp 172.16.0.1:Downloads/names.txt Benchmark

$ scp 172.16.0.1:Downloads/RioDeJaneiro-baixo.coordenadas Benchmark

$ scp 172.16.0.1:Downloads/RioDeJaneiro-cima.coordenadas Benchmark

Executar o Group Definer (lembrar de executar o Gateway primeiro):

$ java -jar Benchmark/BenchmarkDefineGroup.jar 192.168.0.12 5500 Benchmark/names.txt 2> erros20180730.txt

ou se for necessário especificar a quantidade de memória:

$ java -Xmx16G -jar Benchmark/BenchmarkDefineGroup.jar 192.168.0.12 5500 Benchmark/names.txt 2> erros20180730.txt

Monitorando a rede

Na VM005, instale o Speedometer

$ sudo apt-get install speedometer

Analise o tráfego através do comando:

$ speedometer -r eth0 -t eth0

Experimento de Throughput

Requerimentos:

  • Até 10 máquinas virtuais para executar os slices do ContextNet com os endereços IP:

    • 172.16.1.202

    • 172.16.2.202

    • 172.16.3.202

    • 172.16.4.202

    • 172.16.5.202

    • 172.16.6.202

    • 172.16.7.202

    • 172.16.8.202

    • 172.16.9.202

    • 172.16.10.202

  • Pelo menos 2 máquinas clientes

    • 172.16.0.211

    • 172.16.0.212

  • InterSCity

  • ContextNet

  • OpenSplice

  • Aplicativo BenchmarkMyCore

  • Aplicativo BenchmarkOnibusV2

  • Arquivo com o nome dos arquivos com as áreas

  • Arquivos com as áreas

Antes de começar a simulação, verificar se o arquivo de configuração do OpenSplice contempla todos os endereços IPs dos slices e se o endereço da interface no arquivo está configurado corretamente. Conferir com o exemplo do arquivo listado anteriormente. Verifique também se as portas estão liberadas com os comandos:

$ sysctl net.ipv4.ip_local_port_range

net.ipv4.ip_local_port_range = 1025 65000

$ ulimit -n

Iniciar o InterSCity em ContextNet1:

$ cd /opt/InterSCity/dev-env

$ ./project start

$ curl -X GET "http://localhost:8000/catalog/capabilities"

Iniciar os Gateways em cada um dos slices. Atenção para o endereço IP da interface do Gateway.

$ java -Xmx16G -jar /opt/ContextNet/contextnet-2.5.jar 172.16.1.202 5500 OpenSplice

Working Directory = /home/meslin

Gateway started...

Gateway MR-UDP IP: 172.16.1.202:5500

Iniciar o servidor composto pelo Group Definer e Processing Node. Atenção aos parâmetros:

  • -a endereço IP do Gateway

  • -p número da porta UDP do Gateway

  • -f nome do arquivo com os nomes dos arquivos com as áreas

  • -i endereço do InterSCity (0.0.0.0 para não usar o InterSCity)

$ java -Xmx16G -jar Benchmark/BenchmarkMyCore.jar -a 172.16.1.202 -p 5500 -f Benchmark/names.txt -i 0.0.0.0

Iniciar os clientes em cada uma das janelas dos clientes com os seguintes parâmetros. Atenção para o endereço IP do Gateway do slice do ContextNet.

  • -a endereço IP do Gateway do slice do ContextNet

  • -p número da porta do Gateway do slice do ContextNet

  • -b número de ônibus

  • -n quantidade de pacotes a transmitir

  • -i intervalo entre a criação de cada thread que representa os ônibus

$ java -jar Benchmark/BenchmarkOnibusV2.jar -a 172.16.1.202 -p 5500 -b 125 -n 1000 -i 500

Monitorando um Programa Java

Extraído de https://stackoverflow.com/questions/14715970/jvm-remote-profiling-with-jvisualvm.

You need to start jstatd on the remote machine. For this purpose create a jstatd.all.policy file in the home directory of your remote machine and add the following lines:

grant codebase "file:${java.home}/../lib/tools.jar" {

permission java.security.AllPermission;

};

Then on the command line of your remote machine, you will type (this command must be done as root)

$ jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname={Your remote machine IP address}

Once jstatd service start on the remote machine you basically add the remote connection IP address connection on the JVisualVM UI using add remote host.

The Oracle documents for JVisualVM can be referred at https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/applications_remote.html but it is really confusing to understand jstatd steps.

Inclua os seguintes parâmetros ao executar a JVM (isso realmente é necessário? R.: NÃO!):

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=9990

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

Programas de Monitoramento

  • Local

    • top

    • vmstat

    • mpstat

    • sar

  • Remote

    • Glance (glance -w)

Instalação das Ferramentas de Apoio

tc - Traffic Control

This tool shows and manipulates traffic control settings.

To install on Ubuntu (20.04):

$ sudo apt install iproute2

jvisualvm - Java VisualVM

The JVisualVM is part of Oracle JDK (not OpenJDK). It is located at jdk1.8.0_281/bin, the Java bin directory (the exact name depends on the Java version).

Oracle discontinued the JVisualVM on JDK 9. VisualVM replaces JVisualVM in JDK 9 and later.

From JVisualVM website: VisualVM is a visual tool integrating command line JDK tools and lightweight profiling capabilities. Designed for both development and production time use.

To install on Ubuntu (20.04):

$ wget https://github.com/oracle/visualvm/releases/download/2.0.6/visualvm_206.zip

$ unzip visualvm_206.zip

The Java VisualVM executable file is visualvm_206/bin/visualvm (or visualvm_206/bin/visualvm.exe on Windows)

More information at:

sar - Collect, report, or save system activity information

The sar command is installed by default in most Linux flavors, but if you need to install it manually, use the following command:

$ sudo apt install sysstat

If you get the following error, you need to enable system monitoring:

$ sar
Cannot open /var/log/sysstat/sa29: No such file or directory
Please check if data collecting is enabled

To enable system monitoring, please, edit the /etc/default/sysstat file and change ENABLED="false" to ENABLED="true". The following lines show the resulting file:

#
# Default settings for /etc/init.d/sysstat, /etc/cron.d/sysstat
# and /etc/cron.daily/sysstat files
#

# Should sadc collect system activity informations? Valid values
# are "true" and "false". Please do not put other values, they
# will be overwritten by debconf!
ENABLED="true"

Then, restart the service:

$ sudo service sysstat restart