본문 바로가기
개발 이야기/웹 개발 배우기

[Streamlit] OSError: [Errno 24] inotify instance limit reached 오류 해결 방법_걱정 노노

by AI 동키 2023. 7. 28.
반응형

개발환경 : Ubuntu 20.4 / Python3.10 / streamlit 1.25.0

 

Streamlit을 처음 설치하고 나서 명령창에

$ streamlit hello

를 치면 뭔가 나와야 되는데 아래와 같은 오류가 발생했다.

streamlit run first_app.py

Collecting usage statistics. To deactivate, set browser.gatherUsageStats to False.

Traceback (most recent call last):
  File "/home/deepwork/anaconda3/envs/datascnt/bin/streamlit", line 8, in <module>
    sys.exit(main())
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/click/core.py", line 1128, in __call__
    return self.main(*args, **kwargs)
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/click/core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/click/core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/click/core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/streamlit/web/cli.py", line 233, in main_run
    _main_run(target, args, flag_options=kwargs)
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/streamlit/web/cli.py", line 269, in _main_run
    bootstrap.run(file, command_line, args, flag_options)
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/streamlit/web/bootstrap.py", line 411, in run
    _install_pages_watcher(main_script_path)
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/streamlit/web/bootstrap.py", line 386, in _install_pages_watcher
    watch_dir(
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/streamlit/watcher/path_watcher.py", line 153, in watch_dir
    return _watch_path(
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/streamlit/watcher/path_watcher.py", line 128, in _watch_path
    watcher_class(
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/streamlit/watcher/event_based_path_watcher.py", line 92, in __init__
    path_watcher.watch_path(
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/streamlit/watcher/event_based_path_watcher.py", line 170, in watch_path
    folder_handler.watch = self._observer.schedule(
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/watchdog/observers/api.py", line 297, in schedule
    emitter.start()
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/watchdog/utils/__init__.py", line 93, in start
    self.on_thread_start()
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/watchdog/observers/inotify.py", line 118, in on_thread_start
    self._inotify = InotifyBuffer(path, self.watch.is_recursive)
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/watchdog/observers/inotify_buffer.py", line 35, in __init__
    self._inotify = Inotify(path, recursive)
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/watchdog/observers/inotify_c.py", line 155, in __init__
    Inotify._raise_error()
  File "/home/deepwork/anaconda3/envs/datascnt/lib/python3.10/site-packages/watchdog/observers/inotify_c.py", line 399, in _raise_error
    raise OSError(errno.EMFILE, "inotify instance limit reached")
OSError: [Errno 24] inotify instance limit reached

 

이 오류를 해결하는 방법을 알아본다.

raise OSError(errno.EMFILE, "inotify instance limit reached")

 

1. 발생원인

이 오류 메시지는 Linux 시스템에서 inotify 인스턴스 제한에 도달했음을 나타내는데, 여기에서 inotify는 Linux 시스템에서 파일 시스템의 변경을 모니터링하는 데 사용되는 커널 기반 시스템이다.

각각의 inotify 인스턴스는 시스템 리소스를 사용하며, 한 시스템에서 동시에 사용할 수 있는 inotify 인스턴스의 수에는 제한이 있기 때문에 현재 설정을 바꾸어 주어야 한다.

이 오류는 주로 많은 수의 디렉토리나 파일을 감시해야 하는 애플리케이션을 실행할 때 발생하며, 이 경우엔 Streamlit이 해당 애플리케이션이 될 수 있기 때문이다.

2. 해결방법

이 문제를 해결하려면 inotify 인스턴스의 최대 수를 늘려야 한다. 이는 다음과 같이 /etc/sysctl.conf 파일에 다음 라인을 추가함으로써 해결할 수 있을 것이다.

1) 먼저 nano로 /etc/sysctl.config 파일에 접근하자.

$ sudo nano /etc/sysctl.config

2) 그 다음 inotify 인스턴스 최대수를 늘리는 라인을 추가한다. 위치는 적당한 곳에다가.

fs.inotify.max_user_instances=1024

만약 추가한 설정에도 불구하고 동일한 오류가 발생한다면, fs.inotify.max_user_instances 값을 더 높여야 할 수도 있다. 예를 들어, 2048이나 4096으로 설정해볼 수 있다. 그러나 이 값을 무작정 높이는 것은 시스템 리소스에 영향을 줄 수 있으므로 주의가 필요하니 1024로 시도하자. 사용하는 애플리케이션의 요구 사항과 시스템의 리소스 상황을 고려해 적절한 값을 선택해야 한다.

3) 저장하고 종료한다. Ctl + x, Y, Enter 를 순서대로 치면 저장하고 종료할 수 있다.

4) 값을 변경한 후에 suto sysctl -p 명령을 실행하여 변경사항을 적용한다.

5) 다시 streamlit hello 를 실행해본다.

 

3. 결과

수정 결과 접속이 잘 되었다.

이와 마찬가지로 streamlit app.py 와 같이 다른 앱들도 실행하면 정상 작동 될 것이다.

도움이 되었길 바란다. 

 

 

 

반응형

댓글