개발환경 : 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 와 같이 다른 앱들도 실행하면 정상 작동 될 것이다.
도움이 되었길 바란다.
'개발 이야기 > 웹 개발 배우기' 카테고리의 다른 글
원격 개발 환경에서 Streamlit 앱 접근하기 (0) | 2023.07.28 |
---|---|
[Flask] 파이썬 코드를 웹페이지에 띄워보자! 사용자 ID 체크 웹페이지 만들기 (1) | 2022.08.10 |
모바일 앱 기획이 처음이라면 꼭 봐야되는 글_사용자 기반의 UI/UX (2) | 2021.05.14 |
Firebase Hosting 해도 이상한 화면만 나올 때 (4) | 2021.03.30 |
따라하며 만드는 웹사이트 E03-2 : 댓글 등록 시스템 (0) | 2021.03.26 |
댓글