Tag: erlang

芹菜:工人在“broker_heartbeat”秒后收到第一个任务

Environment: – Vagrant (1.9.1) Ubuntu 14.04: – Docker (version 1.12.5): – RabbitMQ v3.6.5 – Client (Celery app v4.0.2, Python 2.7) – Server (Celery app v4.0.2, Python 3.5) 用例:functiontesting。 Workflow #1: 1. py.test (TestApp) starts in docker RabbitMQ and Server application. 2. TestApp registers "new" Client by sending task to Server. 3. TestApp starts in docker […]

系统重新启动后,Mnesia无法识别数据(no_exists错误)

我正在Docker容器中构build一个erlang应用程序。 我的数据目录作为docker卷连接。 我正在使用: application:set_env(mnesia, schema_location, disc),和{disc_copies, Nodes} 。 当我重新启动应用程序: docker-composer stop myapp && docker-composer up myapp 所有工作正常,但是当我完全closures它: sudo systemctl restart docker docker-composer up -d Mnesia停止识别我的数据。 重新启动计算机时也是如此。 基本上(在这个“硬”重启之后)Mnesia正常启动,但是当我尝试从它读取任何东西时,我得到一个错误: {running_method,getTasksByProjectId} terminate reason: {aborted,{no_exists,mtm_tasks}} terminate reason: {{aborted,{no_exists,mtm_tasks}}, {gen_server,call, [{global,tasks_da_serv}, {get_tasks_by_project_id, "j1xvqric-2oj2q784xieccowg8880"}]}} =ERROR REPORT==== 8-Jun-2017::10:29:04 === ** Generic server tasks_da_serv terminating ** Last message in was {get_tasks_by_project_id, "j1xvqric-2oj2q784xieccowg8880"} ** […]

Erlang:rebar3发布,首先开始梁?

我试图在19.3中使用一个新的function: Erlang:应用程序行为陷阱SIGTERM? 我的理解是发送SIGTERM到BEAM现在会触发Erlang 19.3+的正常closures 我使用ENTRYPOINT ./_build/default/rel/myapp/bin/myapp在Docker中启动我的应用程序,其中./_build/default/rel/myapp/bin/myapp是从rebar3 release生成的 当我在Docker中这样做的时候, myapp得到了PID1,而BEAM似乎又获得了另一个PID。 是否有一组不同的命令,我可以运行,使BEAM得到PID1和myapp从那里加载? 就像是 ./start_beam; ./start_my_app_via_beam ./start_beam; ./start_my_app_via_beam ? 我需要这个,因为docker stop发送SIGTERM到PID1。 我需要那个BEAM。 使用上面的入口点,这里是在容器中发生的事情“: top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 4340 644 556 S 0.0 0.0 0:00.01 myapp 14 root 20 0 3751188 50812 6660 S 0.0 0.6 […]

列出Docker群中同一服务的所有IP地址

我正在使用docker云,我想要一个服务,所有的容器可以find所有其他容器在同一个服务。 最终目标是创build一个erlang集群。 我一直在阅读入门指南的这一部分https://docs.docker.com/get-started/part4/#accessing-your-cluster 据我所知,我应该能够使用一个入口networking,并让每个容器暴露相同的端口, 我的堆栈文件如下所示 www: autoredeploy: true deployment_strategy: high_availability image: 'crowdhailer/www:0.1.0' ports: – '8080' target_num_containers: 5 如果我curlwww:8080我得到了我想要的回应,但我无法find一种方法来将主机名www:8080翻译成ips列表

如何连接elixir中的两个docker容器的节点?

我正在尝试连接不同docker集装箱的2个节点。 Container1: iex –name abc@172.17.0.2 –cookie foo Container2: iex –name xyz@172.17.0.4 –cookie foo 现在让我们说我想从xyz@172.17.0.4连接到xyz@172.17.0.4 container2的: iex(xyz@172.17.0.4)> Node.connect(:"abc@172.17.0.2") iex(xyz@172.17.0.4)> true 节点正在连接。 但是,如果我这样做 iex(xyz@172.17.0.4)> node = "abc@172.17.0.2" iex(xyz@172.17.0.4)> Node.connect(:node) iex(xyz@172.17.0.4)> false 为什么我得到错误? 其他function也正在发生,如Node.spawn / 2。

erl中的Ctrl + G不起作用

我试图互连erlang节点,但inputCtrl + G不起作用: Eshell V6.4.1 (abort with ^G) 1> ^G Eshell V6.4.1 (abort with ^G) 1> ^G Eshell V6.4.1 (abort with ^G) 1> ^G Eshell V6.4.1 (abort with ^G) 任何想法为什么会发生? 我正在考虑区域设置,将其更改为UTF-8: LANG=en_US.UTF-8 LANGUAGE=en_US.utf8 LC_CTYPE="en_US.utf8" LC_NUMERIC="en_US.utf8" LC_TIME="en_US.utf8" LC_COLLATE="en_US.utf8" LC_MONETARY="en_US.utf8" LC_MESSAGES="en_US.utf8" LC_PAPER="en_US.utf8" LC_NAME="en_US.utf8" LC_ADDRESS="en_US.utf8" LC_TELEPHONE="en_US.utf8" LC_MEASUREMENT="en_US.utf8" LC_IDENTIFICATION="en_US.utf8" LC_ALL=en_US.utf8 任何想法为什么会发生? 一切都在docker集装箱内完成。

连接到Docker容器中正在运行的Erlang应用程序版本

这是尴尬,但我完全卡住,浪费了今天上午更好的部分。 我有一个由relx创build的Erlang应用程序版本,部署并在Docker容器中运行。 我需要到运行的节点上的shell,但我没有这样做。 这是发生了什么事情: $ docker exec -it 770b497d7f27 /bin/bash [root@ff /]# /app/bin/ff Usage: ff {start|start_boot <file>|foreground|stop|restart|reboot|pid|ping|console|console_clean|console_boot <file>|attach|remote_console|upgrade|escript|rpc|rpcterms} [root@ff /]# /app/bin/ff ping pong [root@ff /]# /app/bin/ff attach Can't access pipe directory /tmp/erl_pipes/ff@127.0.0.1/: No such file or directory [root@ff /]# /app/bin/ff remote_console Eshell V7.1 (abort with ^G) (remshfbfbd4dd-ff@127.0.0.1)1> ^G Eshell V7.1 (abort with ^G) (remshfbfbd4dd-ff@127.0.0.1)1> 就是这样 […]

Erlang垃圾收集

我需要你的帮助来调查Erlang内存消耗的问题。 多么典型,不是吗? 我们有两种不同的部署scheme。 在第一个scheme中,我们在小型虚拟机(在Amazon AWS中)上运行许多相同的节点,每台机器一个节点。 每台机器都有4Gb的RAM。 在另一个部署scheme中,我们在大的裸机上运行这个节点(64G RAM),每台机器上有许多节点。 在此部署中,节点在Docker容器中隔离(内存限制设置为4 Gb)。 我注意到,docker化节点中的进程堆比内存负载相同的非docker化节点堆多了3倍多。 我怀疑非dockerized节点中的垃圾收集更积极。 不幸的是,我没有任何垃圾收集的统计数据,但我想尽快获得。 为了提供更多信息,我应该说我们在Ubuntu 14.04上使用HiPE R17.1和stock kernel。 在这两种scheme中,我们为每个节点运行8个调度程序,并使用默认的fullsweep_after标志。 我的盲目的build议是,Erlang的默认垃圾收集依赖(以某种方式) /proc/meminfo (这是不是在dockerized环境中实际)。 我不是C人,也不熟悉模拟器的内部,所以有人可能指向我负责垃圾回收的Erlang源代码以及一些我可以用来调整这种行为的模拟器选项?

在Docker上连接erlang节点

我有两个docker图片包含一个释放的elixir应用程序。 我在我的本地机器上运行这两个docker。 我试图连接两个节点。 我如何在已命名的节点上运行已发布的应用程序? 或者 – 还有其他方法可以做到吗?

将Erlang Observer App与Docker内部的远程Elixir Phoenix服务器结合使用

我正在尝试做的是在本地运行Erlang Observer应用程序 ,然后连接到运行我的Elixir / Phoenix应用程序的远程Docker容器。 我遇到的问题是无法连接。 从我的研究中,似乎我需要在启动Phoenix服务器之前知道Docker映像的IP地址,以便我可以像这样启动它: iex –name my_app@10.20.57.123 -S mix phoenix.server 我不确定是否需要cookie,所以我也尝试过 iex –name my_app@10.20.57.123 –cookie random_cookie -S mix phoenix.server 我试过使用主机名而不是IP地址,似乎没有工作。 一旦我有这个运行,那么我希望像这样运行Observer erl -name observe@127.0.0.1 -setcookie random_cookie -run observer 或者,用IEx iex –name observe@127.0.0.1 –cookie random_cookie iex> :observer.start() 我可以启动一个凤凰服务器,而不需要知道IP地址,仍然可以远程连接观察员? 我可以在使用这个shell命令构buildDocker镜像时知道Docker镜像的IP地址 ip addr | grep -Eo 'inet (.*) scope global' | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' 但无法弄清楚如何把这个命令启动凤凰服务器。 […]