Hi Kieran, The problem is definitely occurring when trying to allocate the shared memory block. This line from your strace output shows the error happening:
shmget(0x10001b9, 96772768369, IPC_CREAT|0644) = -1 EINVAL (Invalid argument) I suspect the "code 21 (EISDIR)" message we're printing out here is wrong or misleading, maybe. Can you try playing with the constants in this test program? -----------BEGIN test.c----------------------- #include <sys/shm.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <sys/ipc.h> //#define MEMORY_SIZE 96772768369 #define MEMORY_SIZE 1024*1024 #define KEY_PATH "/tmp/osrm.lock" int main(void) { key_t tok = ftok(KEY_PATH, 0); // Original that was being called //int result = shmget(0x10001b9, 96772768369, IPC_CREAT|0644); int result = shmget(tok, MEMORY_SIZE, IPC_CREAT|0644); if (result == -1) { printf("shmget returned -1: errno is %d: %s\n", errno, strerror(errno)); } else { printf("shmget worked - cleaning up\n"); shmctl(result, IPC_RMID, NULL); } } --------------END test.c----------------------------- Try different values of "MEMORY_SIZE", and also try uncommenting the original shmget line that I've included, see if that works standalone, and see what messages you get. Compiling the test program should be a simple "gcc test.c" daniel On Mon, Jan 29, 2018 at 1:48 AM, Kieran Caplice <kieran.capl...@temetra.com> wrote: > Hi Julien/Daniel, > > Thanks for the replies. I had read that github issue prior to emailing the > list, and it did solve the initial error I was having, which was due to > running osrm-datastore as root and later as user "osrm". Rebooting the > machine solved this as it did for you, Julien. But after that I'm faced > with this issue. > > @Daniel: /tmp contains the two files: > -rw-rw-r-- 1 osrm osrm 0 Jan 26 16:34 osrm-datastore.lock > -rw-rw-r-- 1 osrm osrm 0 Jan 26 16:34 osrm.lock > > Output of the strace: > > root@htzh /opt/osrm # su - osrm -c "strace osrm-datastore > /opt/osrm/data/planet-latest/planet-latest.osrm" > ... > open("/opt/osrm/data/planet-latest/planet-latest.osrm.tld", O_RDONLY) = 5 > read(5, "OSRN\5\17\0M\25\17\0\0\0\0\0\0\1\0\3\0\1\1\3\0\1\0\v\0\1\1\v\0"..., > 8191) = 8191 > close(5) = 0 > stat("/opt/osrm/data/planet-latest/planet-latest.osrm.partition", > 0x7ffcde3c8d20) = -1 ENOENT (No such file or directory) > stat("/opt/osrm/data/planet-latest/planet-latest.osrm.cells", > 0x7ffcde3c8d20) = -1 ENOENT (No such file or directory) > stat("/opt/osrm/data/planet-latest/planet-latest.osrm.cell_metrics", > 0x7ffcde3c8d20) = -1 ENOENT (No such file or directory) > stat("/opt/osrm/data/planet-latest/planet-latest.osrm.mldgr", > 0x7ffcde3c8d20) = -1 ENOENT (No such file or directory) > ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0 > ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0 > write(1, "[info] Allocating shared memory "..., 57[info] Allocating shared > memory of 96772768369 bytes > ) = 57 > stat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 > stat("/tmp/osrm.lock", {st_mode=S_IFREG|0664, st_size=0, ...}) = 0 > stat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 > stat("/tmp/osrm.lock", {st_mode=S_IFREG|0664, st_size=0, ...}) = 0 > shmget(0x10001b9, 96772768369, IPC_CREAT|0644) = -1 EINVAL (Invalid > argument) > ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0 > ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0 > write(2, "\33[31m[error] Error while attempt"..., 88[error] Error while > attempting to allocate shared memory: Invalid argument, code 21) = 88 > write(2, "\33[0m", 4) = 4 > write(2, "\n", 1 > ) = 1 > write(2, "terminate called after throwing "..., 48terminate called after > throwing an instance of ') = 48 > ... > > Can you provide any further insight into what the problem might be? > > By the way, we're using the latest release version (v5.15.0) built from > source on 16.04. > > Kind regards, > Kieran Caplice > > > On 26/01/18 17:48, Julien Coupey wrote: > >> Hi, >> >> Not sure if you're hitting the same problem here, but I recall a related >> discussion happening a while back at: >> >> https://github.com/Project-OSRM/osrm-backend/issues/1724 >> >> At least it provides a few hints on permissions and shared memory. >> >> Julien >> >> Le 26/01/2018 à 18:31, Daniel Patterson a écrit : >> >>> Kieran, >>> >>> Hmm, we could probably improve the error handling here and make the >>> message a bit more useful. >>> >>> The problem is probably one of: >>> >>> 1) Permission problems accessing /tmp/osrm.lock >>> 2) Permission problems creating shared memory >>> >>> Code 21 is: >>> >>> $ errno 21 >>> EISDIR 21 Is a directory >>> >>> So I'd suspect some bad filesystem permissions somewhere. You can try >>> running the `osrm-datastore` command under `strace` and see if you can spot >>> the syscal that's failing with - that might give a hint as to what's going >>> wrong. >>> >>> daniel >>> >>> On Fri, Jan 26, 2018 at 8:57 AM, Kieran Caplice < >>> kieran.capl...@temetra.com <mailto:kieran.capl...@temetra.com>> wrote: >>> >>> Hello, >>> >>> I'm wondering if anyone can help out with this error I'm getting >>> when running osrm-datastore under a non-root user: >>> >>> root@htzh /opt/osrm # su - osrm -c "osrm-datastore >>> /opt/osrm/data/planet-latest/planet-latest.osrm" >>> [info] Loading data into REGION_1 >>> [info] load names from: >>> "/opt/osrm/data/planet-latest/planet-latest.osrm.names" >>> [info] Allocating shared memory of 96772768369 bytes >>> [error] Error while attempting to allocate shared memory: Invalid >>> argument, code 21 >>> terminate called after throwing an instance of >>> 'osrm::util::exception' >>> what(): Invalid argumentinclude/storage/shared_memory.hpp:308 >>> root@htzh /opt/osrm # su - osrm -c "ulimit -a | grep max" >>> max locked memory (kbytes, -l) 128849018880 >>> max memory size (kbytes, -m) unlimited >>> max user processes (-u) 1031189 >>> >>> Available shared memory for the user has been increased in >>> /etc/security/limits.conf as per the wiki page, as shown above. >>> >>> The server has 256GB of RAM, with at least 200GB available most of >>> the time. I successfully ran osrm-datastore and osrm-routed as the >>> root user earlier, but we would ideally run it under a separate user. >>> >>> Thanks in advance. >>> >>> Kind regards, >>> Kieran Caplice >>> >>> >>> _______________________________________________ >>> OSRM-talk mailing list >>> OSRM-talk@openstreetmap.org <mailto:OSRM-talk@openstreetmap.org> >>> https://lists.openstreetmap.org/listinfo/osrm-talk >>> <https://lists.openstreetmap.org/listinfo/osrm-talk> >>> >>> >>> >>> >>> _______________________________________________ >>> OSRM-talk mailing list >>> OSRM-talk@openstreetmap.org >>> https://lists.openstreetmap.org/listinfo/osrm-talk >>> >>> >> _______________________________________________ >> OSRM-talk mailing list >> OSRM-talk@openstreetmap.org >> https://lists.openstreetmap.org/listinfo/osrm-talk >> > > > _______________________________________________ > OSRM-talk mailing list > OSRM-talk@openstreetmap.org > https://lists.openstreetmap.org/listinfo/osrm-talk >
_______________________________________________ OSRM-talk mailing list OSRM-talk@openstreetmap.org https://lists.openstreetmap.org/listinfo/osrm-talk