在Amazon EC2实例(t2.small,Oregon,Ubuntu 16.04)中执行我的程序时,出现错误
ElectricFence Exiting: mprotect() failed: Cannot allocate memory
启动实例后我遵循的步骤是:
安装build-essentials,pip和cmake
sudo apt-get update && sudo apt-get install build-essential python-pip cmake
安装conan软件包管理器
pip install conan
克隆存储库
git clone https://github.com/oyarsa/faptp.git
将cd转换为repo,创建构建文件夹,安装依赖项并运行cmake
mkdir build && cd build
conan install .. -s compiler=gcc -s compiler.libcxx=libstdc++11 --build=missing
cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
cmake --build .
编译完成后,我回到根目录并尝试运行程序
cd .. && ./build/bin/faptp
执行此操作时,程序会执行一段时间,然后使用此输出退出:
SA-ILS
ElectricFence Exiting: mprotect() failed: Cannot allocate memory
SA-ILS从我的程序输出。 ElectricFence的错误就是问题所在。我之前从未听说过,这是我第一次在EC2中运行这个程序,所以我认为它与它有关。
源代码位于https://github.com/oyarsa/faptp,如果有帮助的话。
答案 0 :(得分:1)
您确定错误不是因为它不能分配更多内存吗?
t2.small实例有2GB的RAM,默认情况下不启用swap。因此,如果您需要更多,那么您将会看到该错误。
有一种简单的方法可以确定操作系统是否存在问题,或者实际上是否内存不足:停止实例,将其更改为更大的实例类型,然后重新启动它。一个t2.large拥有8GB的内存,如果你不让它运行超过一个错误就可以花费0.094美元。如果有效,那么试试t2.medium,试用费用为0.047美元。 (或者,如果浪费一分钱太贵,你可以尝试从t2.medium开始)